我正在编写一个脚本,该脚本必须在运行过程中更改用户才能访问网络文件夹。我已经弄清楚了如何使凭据正常工作,但现在还无法理解如何将参数传递给正在调用的第二个脚本。我目前拥有的代码:
$myJob = Start-Job -ScriptBlock {& "\\my\folder\path\script.ps1" -serverName $serverName -serverInstance $serverInstance} -Credential $cred
$myJob | Wait-Job
$myJob | Receive-Job -Keep
我需要将serverName
和serverInstance
变量传递给Start-Job
正在运行的脚本,同时还要能够使用凭据。有办法吗?
我已经调查了Invoke-Command
和Invoke-Expression
,但是都不适合这种情况。 Invoke-Command不适用于远程计算机/驱动器,Invoke-Expression不适用于凭据。我尝试了提供的here答案,但是也无法正确传递参数。
由于我已经在这个问题上工作了几个小时了,因此非常感谢任何帮助。我确定我缺少明显的东西。
答案 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。