нет результатов приема-задания для gci, когда -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

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

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

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

В чем дело?

ИЗМЕНИТЬ / Что происходит?

Разоренная работа кажется эквивалентной

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

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


person noam    schedule 01.03.2013    source источник


Ответы (1)


Вам нужно передать аргумент в блок сценария

$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
person CB.    schedule 01.03.2013
comment
Аллилуйя, спс. Но почему разное поведение на Win7 и 2008R2? - person noam; 01.03.2013
comment
Ваш код не работает в powershell v2.0/v3.0 на xp, 7, 2008, 2008 r2. Единственный способ передать переменную в блоке сценариев — использовать параметр списка аргументов. В версии 3, я думаю, вы можете использовать -path $using:x, и это работает. - person CB.; 01.03.2013
comment
Первые две строки в моем вопросе возвращают результаты на Win7. Я почитаю аргументы блока сценариев. - person noam; 01.03.2013
comment
@noam Попробуйте посмотреть точнее, и вы обнаружите, что результат не является вашим каталогом c:\temp. В моем поле 7 возвращается каталог %env:userprofile\documents... - person CB.; 01.03.2013
comment
Д'о. Я пытался проголосовать против себя, но, к счастью, это не разрешено. - person noam; 01.03.2013