【问题标题】:Powershell Passing Parameters to Nested Start-JobPowershell 将参数传递给嵌套的 Start-Job
【发布时间】:2017-10-08 05:56:02
【问题描述】:

我正在尝试将参数传递给嵌套作业。

$executepath = "D:\nttools\CoreAutomation\$patch.zipfilename\$ntupdatefilename"

$sb = {Start-Job -Name $NTUpdate -ScriptBlock {& cmd.exe /c $executepath}}

Invoke-Command -Session $NTSession -ScriptBlock $sb -ArgumentList $executepath

此输出显示该命令实际上并未呈现字符串中的参数:

State          : Running
PSComputerName : LKS.nt.isg.local
RunspaceId     : 8a1c9cc2-1cd0-42a6-a1d0-89d977aabf04
HasMoreData    : True
StatusMessage  :
Location       : localhost
Command        : & cmd.exe /c $executepath
JobStateInfo   : Running
InstanceId     : 9e95c0d8-d177-4a1a-9283-56f07ff5f0a8
Id             : 1
Name           : Job1
ChildJobs      : {System.Management.Automation.PSRemotingChildJob}
PSJobTypeName  : BackgroundJob
PSBeginTime    : 5/9/2017 2:00:49 PM
PSEndTime      :

我也尝试在脚本块中添加此参数,结果相同:

$executepath = "D:\nttools\CoreAutomation\$patch.zipfilename\$ntupdatefilename"

$sb = {Start-Job -Name $NTUpdate -ScriptBlock {param($executepath) & cmd.exe /c $executepath} -ArgumentList $executepath}

Invoke-Command -Session $NTSession -ScriptBlock $sb -ArgumentList $executepath


State          : Running
PSComputerName : LKS.nt.isg.local
RunspaceId     : 7e039382-d8a6-4298-9983-8f3f6fd2a6c3
HasMoreData    : True
StatusMessage  :
Location       : localhost
Command        : param($executepath) & cmd.exe /c $executepath
JobStateInfo   : Running
InstanceId     : 77e80c13-2801-4726-81f4-8c960319cd0b
Id             : 1
Name           : Job1
ChildJobs      : {System.Management.Automation.PSRemotingChildJob}
PSJobTypeName  : BackgroundJob
PSBeginTime    : 5/9/2017 2:08:38 PM
PSEndTime      :

更新:

尝试了 cmets 中列出的内容。不走运,结果相同

$executepath = "D:\nttools\CoreAutomation\$patch.zipfilename\$ntupdatefilename"

$sb = {param($executepath) Start-Job -Name NTUpdate -ScriptBlock {param($executepath) & cmd.exe /c $executepath} -ArgumentList $executepath}

Invoke-Command -Session $NTSession -ScriptBlock  $sb -ArgumentList $executepath


State          : Running
PSComputerName : LKS.nt.isg.local
RunspaceId     : 7b7b86df-a216-494e-b7e7-2336e6994a06
HasMoreData    : True
StatusMessage  :
Location       : localhost
Command        : param($executepath) & cmd.exe /c $executepath
JobStateInfo   : Running
InstanceId     : 4d5dd307-2158-4b38-b118-987f1e56cb12
Id             : 1
Name           : NTUpdate
ChildJobs      : {System.Management.Automation.PSRemotingChildJob}
PSJobTypeName  : BackgroundJob
PSBeginTime    : 5/9/2017 2:25:19 PM
PSEndTime      :

更新 2 -$using:executepath

Invoke-Command -Session $NTSession -ScriptBlock {Start-Job -Name NTUpdate -ScriptBlock {& cmd.exe /c $Using:executepath}}

我试过了,我得到了这个错误:

The value of the using variable '$using:executepath' cannot be retrieved because it has not been set in the local
session.
    + CategoryInfo          : InvalidOperation: (:) [Start-Job], RuntimeException
    + FullyQualifiedErrorId : UsingVariableIsUndefined,Microsoft.PowerShell.Commands.StartJobCommand
    + PSComputerName        : LKSNTADM01.nt.isg.local

【问题讨论】:

  • 我认为对于Invoke-Command,您需要将脚本块中的参数引用为$using:executepath
  • $sb = {param($executepath) Start-Job -Name $NTUpdate -ScriptBlock {param($executepath) & cmd.exe /c $executepath} -ArgumentList $executepath}
  • @PetSerAl 尝试使用与以前相同的输出。诺戈。
  • 好吧,让我们稍微备份一下。您是否尝试引用 $patch 对象的 ZipFileName 属性?还是$patch 是一个字符串?你确定$executepath 是一个有效的字符串吗?
  • @BilliAm 您的期望是错误的。在命令属性中,您应该看到 $executepath 而不是它设置的值。

标签: powershell parameter-passing start-job scriptblock


【解决方案1】:

好的,如果我理解正确,您的主要问题是,当您查看作业中的命令时,您会看到:

& cmd.exe /c $executepath

当您希望看到时:

& cmd.exe /c D:\nttools\CoreAutomation\Defect1126511_CD_2017-04-24_1800_A‌​\nttest_genlog.cmd

脚本块不会插入字符串变量,所以如果你想看到它全部展开,你可以做的是将脚本块定义为字符串,然后将其转换为脚本块。

$sbtext = "Start-Job -Name $NTUpdate -ScriptBlock {& cmd.exe /c $executepath}"
$sb = [scriptblock]::Create($sbtext)

这应该会得到你想要的结果。

【讨论】:

  • 就是这样。我还删除了&
猜你喜欢
  • 2023-01-02
  • 2013-01-17
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 2022-01-25
相关资源
最近更新 更多