此语句不返回任何结果:
$x = "C:temp"
Start-Job -ScriptBlock {get-childItem -path $x} | Wait-Job | Receive-job
但是提供不带变量的path参数,像这样…
Start-Job -ScriptBlock {get-childItem -path C:temp} | Wait-Job | Receive-job
…返回临时文件夹的内容,在本例中为durrr.txt。这是在Windows Server 2008R2 SP1上使用Powershell $host。版本输出如下:
Major Minor Build Revision
----- ----- ----- --------
3 0 -1 -1
我怀疑Powershell是v3,我试着将Windows 7 SP1桌面从v2更新到v3,但没有运气再出现这个问题。在升级后的桌面上,$host。版本输出现在与上面匹配。
怎么回事?
编辑/发生了什么事?
失败的任务似乎相当于
Start-Job -ScriptBlock {get-childItem -path $null} | Wait-Job | Receive-job
所以gci返回后台作业的当前目录的结果,文档文件夹,碰巧是空的。
您需要向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