1

我有以下 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*),它可以正常工作,提供一个过滤列表。

谁能解释我做错了什么?

4

1 回答 1

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
    }
于 2012-08-03T14:06:25.390 回答