2015-12-08 4 views
0

я в настоящее время возникают проблемы с попытками Многопоточной развертывание виртуальных машин (VMWare специально), и я использую следующий код, чтобы попытаться что:Передача параметров с параметрами -ArgumentList и Start-Job не работает. Что не так с кодом?

подключения-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 не переводит в число whic h будет $ i?

Спасибо, Alex

+0

Неужели работа не работает? Вы уверены, что он не переводится? Я не думаю, что результат работы покажет замещение. – briantist

+0

Я сделал небольшой тест; он отлично работает. Я думаю, что вы можете ввести в заблуждение вывод «Start-Job» с выходом самого задания: '9 |% {Start-Job {param ([string] $ num)" ~ $ num ~ "} - ArgumentList $ _ } | Wait-Job | Receive-Job' – briantist

+0

Вы правы. Результат действительной команды прекрасен. Я не думал проверять его, увидев вывод Start-Job. –

ответ

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 | выберите -expand Command, я все еще вижу:

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 

Таким образом, по существу, это было на самом деле работает , это просто не выглядело так, как было.

 Смежные вопросы

  • Нет связанных вопросов^_^