【问题标题】:Passing in Parameters With -ArgumentList and Start-Job not Working. What's wrong with the code?使用 -ArgumentList 和 Start-Job 传入参数不起作用。代码有什么问题?
【发布时间】:2015-12-08 17:22:29
【问题描述】:

我目前在尝试多线程部署虚拟机(特别是 VMWare)时遇到问题,我正在使用以下代码进行尝试:

connect-viserver vcenter

for($i=251; $i -le 261; $i++) {

Start-Job {Param([string]$num) New-vm -ResourcePool Storage-POCs -Name "virtual-machine-$num" -vm "newvm" -Datastore MyDataStore} -ArgumentList $i

}

这是我当前从该代码进入终端的输出:

HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : Param([string]$num)
            New-vm -ResourcePool Storage-POCs -Name "virtual-machine-$num" -vm "newvm" -Datastore MyDataStore
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 3a6b8f27-c8d8-4386-9e58-6c1dfcfef52c
Id            : 419
Name          : Job419
ChildJobs     : {Job420}
Output        : {}
Error         : {}
Progress      : {}
Verbose       : {}
Debug         : {}
Warning       : {}
State         : Running


HasMoreData   : True
StatusMessage :
Location      : localhost
Command       : Param([string]$num)
            New-vm -ResourcePool Storage-POCs -Name "virtual-machine-$num" -vm "newvm" -Datastore MyDataStore
JobStateInfo  : Running
...

谁能告诉我为什么 $num 不是转换成 $i 的数字吗?

谢谢, 亚历克斯

【问题讨论】:

  • 工作不工作了吗?确定没有翻译?我认为作业的输出不会显示替换。
  • 我做了一个小测试;它工作正常。我认为您可能会将Start-Job 的输出与作业本身的输出混淆:9|%{Start-Job{param([string]$num) "~$num~"}-ArgumentList $_}|Wait-Job|Receive-Job
  • 你是对的。实际命令的输出很好。看到Start-Job的输出,没想到去查。

标签: powershell parameters arguments powercli start-job


【解决方案1】:

所以,命令实际上是按照您的预期执行的,只是当您运行 Get-Job 时,它会向您显示执行的精确命令。这意味着它将$num 显示为字符串的名称,而不是值。

在执行命令之前,实际上不会发生替换。

您可以像这样将值转储到文本文件中进行测试。

for($i=251; $i -le 261; $i++) {

Start-Job {Param([string]$num) "virtual-machine-$num">>t:\test.txt} -ArgumentList $i

}

现在,当我运行 Get-Job | select -expand 命令,我还是会看到:

Param([string]$num) "virtual-machine-$num">>t:\test.txt
Param([string]$num) "virtual-machine-$num">>t:\test.txt
Param([string]$num) "virtual-machine-$num">>t:\test.txt
Param([string]$num) "virtual-machine-$num">>t:\test.txt
Param([string]$num) "virtual-machine-$num">>t:\test.txt
Param([string]$num) "virtual-machine-$num">>t:\test.txt

但是,当我阅读该文件时,我发现它实际上做了我想要的:

virtual-machine-251
virtual-machine-252
virtual-machine-253
virtual-machine-254
virtual-machine-255
virtual-machine-256
virtual-machine-257
virtual-machine-258
virtual-machine-259
virtual-machine-260
virtual-machine-261

所以,基本上这确实有效,只是看起来不像。

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 2013-11-12
    • 1970-01-01
    • 2022-12-05
    • 2019-11-06
    • 2012-12-23
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多