使用-ArgumentList和Start-Job无法正常传递参数。代码有什么问题?

时间:2015-12-08 17:22:29

标签: powershell parameters arguments powercli start-job

我目前在尝试多线程部署虚拟机(特别是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?

谢谢, 亚历

1 个答案:

答案 0 :(得分:0)

因此,该命令实际上正如您所期望的那样执行,只是当您运行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

所以,基本上这实际上是有效的,它看起来不像是。