意図したとおりに機能するこの既存の 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}}
基本的に、私が理解していることから、データを収集し、それらを変数「またはオブジェクト?」に保存します。
最後の行では、リモート マシン ($_.Name で定義) への SSH 接続を試行し、成功した場合は "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}}
}
}
}
これを達成する方法を教えてください。事前にどうもありがとうございました!