3

我是 cmdlet 的新手,在Start-Job调用带有 cmdlet 的脚本块时遇到了问题,该脚本块带有参数。这是我到目前为止所拥有的:

    Start-Job -ScriptBlock {
       $ServiceObj = Get-Service -Name $ServiceName -ComputerName $Computer -ErrorAction Stop   
       Stop-Service -InputObj $ServiceObj -erroraction stop 
    }

当我运行参数为 null 或空且参数为 null 或空时,receive-job我看到错误。在任何情况下都不是这样。上面的代码片段是从两个 foreach 循环内部调用的:-ComputerName-InputObj

foreach($Computer in $ComputerNames) {
  foreach($ServiceName in $ServiceNames) {
   #..call snippet above
  }
 }

我试过-ArgumentList在调用我的脚本块时使用,但也没有运气。我确定我错过了什么?

4

1 回答 1

6

您确实需要使用 ArgumentList(除非您使用的是 PowerShell V3),例如:

Start-Job -ScriptBlock {param($ComputerName)
   $ServiceObj = Get-Service -Name $ServiceName -CN $ComputerName -ErrorAction Stop
   Stop-Service -InputObj $ServiceObj -erroraction stop 
} -ArgumentList $Computer

如果您使用的是 PowerShell V3,则可以使用using变量限定符,例如:

Start-Job -ScriptBlock {
   $ServiceObj = Get-Service -Name $ServiceName -CN $using:Computer -ErrorAction Stop
   Stop-Service -InputObj $ServiceObj -erroraction stop 
}
于 2012-09-24T19:51:51.060 回答