powershell之Start-Job 脚本 block ——如何调用带参数的 cmdlet

soundcode 阅读:33 2024-10-01 17:34:08 评论:0

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

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

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

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

我试过在调用我的脚本 block 时使用 -ArgumentList 但也没有成功。我确定我错过了什么?

请您参考如下方法:

您确实需要使用 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  
} 


标签:Shell
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号