1

次のPowerShellスクリプトがあります。

$BizTalkHosts = "BTSSvc*"
    Foreach($svc in Invoke-Command -Computer d-vasbiz01 -ScriptBlock{ get-service -Name $BizTalkHosts})
    {
        Write-Host $svc.name
    }

これにより、「BTSSVC*」で始まるリモートコンピューター上のサービスのリストが返されます。問題は、実行時まで実際にサービス名がわからないことです。サービス名はパラメータとしてスクリプトに渡されます。

上記のスクリプトを実行すると、すべてのサービスのリストが表示されます。必要なものではありません。ただし、文字列リテラルをget-serviceコマンドレット(つまり、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 に答える