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