Я создал список объектов, $ LIST. Каждый объект в списке имеет несколько атрибутов, включая полное доменное имя и службы. FQDN - это полное имя сервера, а сервисы - это список служб, которые я хочу проверить на удаленном сервере.Powershell invoke-command, передающая объект
Начну с:
$LIST = <CALL to Module function to populate the server information>
Далее идет вызов Invoke-Command
Invoke-Command -ComputerName $LIST.FQDN -ScriptBlock {
Write-Host "Working on $($env:ComputerName)"
Get-Service
}
Но что мне нужно сделать, это передать список услуг, которые соответствуют -ComputerName , Я знаю, что могу использовать -ArgumentList и я попытался:
Invoke-Command -ComputerName $LIST.FQDN -ScriptBlock {
Param ([string[]] $ServiceList)
Write-Host "Working on $($env:ComputerName)"
($ServiceList -split(",")).trim() | %{
$svc =Get-Service $_
$Svc
}
} -ArgumentList $LIST.Services
Но это проходит список всех услуг для каждого сервера. Я могу это сделать:
$LIST | %{
$Server = $_
Invoke-Command -ComputerName $Server.FQDN -ScriptBlock {
Param ([string[]] $ServiceList)
Write-Host "Working on $($env:ComputerName)"
($ServiceList -split(",")).trim() | %{
$svc =Get-Service $_
$Svc
}
} -ArgumentList $($Server.SERVICES)
}
Но тогда я потеряю преимущество параллельности Invoke-Command Командлет.
Как передать список услуг для обрабатываемого конкретного компьютерного имени? .
Вы посмотрели параметр -AsJob команды Invoke-Command? –