我有以下powershell脚本:
$BizTalkHosts = "BTSSvc*"
Foreach($svc in Invoke-Command -Computer d-vasbiz01 -ScriptBlock{ get-service -Name $BizTalkHosts})
{
Write-Host $svc.name
}
我希望这返回远程计算机上以“BTSSVC *”开头的服务列表。问题是,直到运行时我才会真正知道服务名称,它将作为参数传递给脚本。
当我运行上面的脚本时,我得到了所有服务的列表 - 而不是我想要的!但是,如果我为get-service cmdlet提供字符串文字(即get-service -Name“BTSSvc *),它可以正常工作,提供过滤列表。
任何人都可以解释一下我做错了吗?
答案 0 :(得分:3)
在这种情况下无需使用Invoke-Command
,您可以使用Get-Service
获取服务:
Get-Service -Name $BizTalkHosts -ComputerName d-vasbiz01
为了能够使用Invoke-Command
(这是一种矫枉过正),你需要在脚本块中创建一个参数,并通过-ArgumentList参数将$ BizTalkHosts传递给脚本块
$BizTalkHosts = "BTSSvc*"
Foreach($svc in Invoke-Command -Computer d-vasbiz01 -ScriptBlock{ param($name) get-service -Name $name}) -Argument $ArgumentList
{
Write-Host $svc.name
}