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

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

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

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

В чем дело?

РЕДАКТИРОВАТЬ / Что происходило?

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

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

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

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
Другие вопросы по тегам