Существует этот существующий фрагмент кода PS, который работает по назначению:
$creds = New-Object -TypeName System.Management.Automation.PSCredential ("USERID", (new-object System.Security.SecureString));
$FullVM | Where-Object {$_.runtime.powerState -eq "PoweredOn"} |
Select-Object -Property Name,@{N="GuestId";E={$_.Guest.GuestId}},
@{N="Installed Guest OS";E={$_.Guest.GuestFullName}},
@{N="Configured Guest OS";E={$_.Config.GuestFullName}},
@{N="ACCESS";E={$CurrentSession=New-SSHSession -ComputerName $_.Name -AcceptKey -keyfile C:\temp\key.txt -Credential $creds ;(Invoke-SSHCommand -SSHSession $CurrentSession -Command "echo YES" -OutVariable result).output}}
По сути, насколько я понимаю, он собирает данные и сохраняет их в переменных или объектах?
В последней строке он пытается подключиться к удаленному компьютеру по SSH (определен в $ _. Name) и выдает «YES» в случае успеха, а затем сохраняется в «объекте» «ACCESS»:
@{N="ACCESS";E={$CurrentSession=New-SSHSession -ComputerName $_.Name -AcceptKey Credential $creds ;(Invoke-SSHCommand -SSHSession $CurrentSession -Command "echo YES" -OutVariable result).output}}
Проблема, с которой я сейчас сталкиваюсь, заключается в попытке выяснить, как вставить / прикрепить / переписать эту же строку в эту строку:
foreach ($vmguest in $FullVM) {
$vmguest.Config.Hardware.Device | Where-Object {$vmguest.Guest.GuestFullName -cnotlike "*Microsoft*" -and $_.GetType().Name -match $unwantedHardware} | Foreach-Object {
New-Object -TypeName PSObject -Property @{
Name = $vmguest.name
Label = $_.DeviceInfo.Label
OS = $vmguest.Guest.GuestFullName
}
}
}
Как мне переписать это так, чтобыпо-прежнему предоставляют ту же функцию, что и из предыдущего фрагмента?Пишу ли я это так?
foreach ($vmguest in $FullVM) {
$vmguest.Config.Hardware.Device | Where-Object {$vmguest.Guest.GuestFullName -cnotlike "*Microsoft*" -and $_.GetType().Name -match $unwantedHardware} | Foreach-Object {
New-Object -TypeName PSObject -Property @{
Name = $vmguest.name
Label = $_.DeviceInfo.Label
OS = $vmguest.Guest.GuestFullName
@{N="ACCESS";E={$CurrentSession=New-SSHSession -ComputerName $_.Name -AcceptKey Credential $creds ;(Invoke-SSHCommand -SSHSession $CurrentSession -Command "echo YES" -OutVariable result).output}}
}
}
}
Не могли бы вы рассказать мне, как это сделать?Заранее большое спасибо!