【问题标题】:Using Parameters when Calling Script with Start-Job使用 Start-Job 调用脚本时使用参数
【发布时间】:2019-10-20 10:21:40
【问题描述】:

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

$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 提供的答案,但也无法正确传递参数。

非常感谢任何帮助,因为我已经解决这个问题几个小时了。我确定我遗漏了一些明显的东西。

【问题讨论】:

  • 您可以在此处使用using 关键字:-serverName $using:serverName -serverInstance $using:serverinstance
  • Start-Job -ArgumentList $var1,$var2 -ScriptBlock {$args[0],$args[1]}
  • @AdminOfThings 太棒了,谢谢!那工作得很好。我从来没有遇到过$using,所以我有一些新东西要研究和学习。

标签: powershell


【解决方案1】:

如果您使用的是 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 cmets 有一种方法可以做到这一点。

更多信息请参见About_Remote_Variables

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 2013-01-17
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2021-04-03
    • 2018-01-31
    相关资源
    最近更新 更多