【发布时间】:2014-11-15 22:29:49
【问题描述】:
我创建了一个对象列表 $LIST。列表中的每个对象都有几个属性,包括 FQDN 和服务。 FQDN 是完全限定的服务器名称,服务是我要在远程服务器上检查的服务列表。
我将开始:
$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)
}
但随后我失去了调用命令 CmdLet 的并行性优势。
如何传递正在处理的特定 ComputerName 的服务列表?
【问题讨论】:
-
你看过Invoke-Command的-AsJob参数了吗?
标签: powershell powershell-remoting invoke-command