1

Это не возвращает ничего:не получить работу, результаты для ИГС, когда -path переменная

$x = "C:\temp" 
Start-Job -ScriptBlock {get-childItem -path $x} | Wait-Job | Receive-job 

Но обеспечивая параметр пути без переменной, вот так ...

Start-Job -ScriptBlock {get-childItem -path C:\temp} | Wait-Job | Receive-job 

.. . Возвращает содержимое этой временной папки durrr.txt в этом случае. Это на Windows Server 2008R2 SP1 с Powershell $ выходом host.version следующим образом:

Major Minor Build Revision 
----- ----- ----- -------- 
3  0  -1  -1 

Подозревая v3 Powershell, я попытался обновление SP1 рабочего стола Windows 7 из v2 в v3, но не повез воссоздание проблемы. На этом обновленном рабочем столе выход $ host.version теперь соответствует указанному выше.

Что происходит?

EDIT/Что происходит?

лопнул работа кажется эквивалентна

Start-Job -ScriptBlock {get-childItem -path $null} | Wait-Job | Receive-job 

Так GCI вернулись результаты для текущего каталога фонового задания, в папку Документы, которые оказались пустыми.

ответ

1

Вам необходимо пройти аргумент в ScriptBlock

$x = "C:\temp" 
Start-Job -ScriptBlock {get-childItem -path $args[0]} -argumentlist $x | Wait-Job | Receive-job 

В Powershell V3 вы можете сделать:

$x = "C:\windows" 
Start-Job -ScriptBlock {get-childItem -path $using:x} | Wait-Job | Receive-job 
+0

Аллилуйя, ТНХ. Но почему различное поведение на Win7 vs 2008R2? – noam

+0

Ваш код не работает ни в powershell v2.0/v3.0 на xp, 7, 2008, 2008 r2. Единственный способ передать переменную в sciptblock - использовать аргумент-параграф. В v3 я думаю, что вы можете использовать '-path $, используя: x', и он работает. –

+0

Первые две строки в моем вопросе возвращают результаты на Win7. Я прочитаю аргументы скриптового блока. – noam

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