Переписать строку Powershell для другого скрипта - PullRequest
0 голосов
/ 07 февраля 2019

Существует этот существующий фрагмент кода 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}}
          }
       }
    }

Не могли бы вы рассказать мне, как это сделать?Заранее большое спасибо!

...