使用Start-Job调用脚本时使用参数

时间:2019-06-04 21:17:02

标签: powershell

我正在编写一个脚本,该脚本必须在运行过程中更改用户才能访问网络文件夹。我已经弄清楚了如何使凭据正常工作,但现在还无法理解如何将参数传递给正在调用的第二个脚本。我目前拥有的代码:

$myJob = Start-Job -ScriptBlock {& "\\my\folder\path\script.ps1" -serverName $serverName -serverInstance $serverInstance} -Credential $cred
        $myJob | Wait-Job
        $myJob | Receive-Job -Keep

我需要将serverNameserverInstance变量传递给Start-Job正在运行的脚本,同时还要能够使用凭据。有办法吗?

我已经调查了Invoke-CommandInvoke-Expression,但是都不适合这种情况。 Invoke-Command不适用于远程计算机/驱动器,Invoke-Expression不适用于凭据。我尝试了提供的here答案,但是也无法正确传递参数。

由于我已经在这个问题上工作了几个小时了,因此非常感谢任何帮助。我确定我缺少明显的东西。

1 个答案:

答案 0 :(得分:2)

如果您使用的是PowerShell版本3或更高版本,则可以使用using范围修饰符:

$myJob = Start-Job -ScriptBlock {& "\\my\folder\path\script.ps1" -serverName $using:serverName -serverInstance $using:serverInstance}
  

还可以在远程命令中使用局部变量,但是必须指出该变量是在本地会话中定义的。从Windows PowerShell 3.0开始,可以使用“使用范围”修饰符在远程命令中标识本地变量。 Using的语法如下:   $Using:<VariableName>

如果您使用的是PowerShell版本2,则需要使用-ArgumentList参数,然后修改脚本块以接受传递的参数。 Avshalom评论了一种方法。

有关更多信息,请参见About_Remote_Variables