1

これは何も返しません:

$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 フォルダーの結果を返しましたが、これはたまたま空でした。

4

1 に答える 1

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
于 2013-03-01T15:25:28.470 に答える