在這個例子中,我試圖將Get-ChildItem
的結果傳遞給一個scriptblock,但成功有限,並且出現了意想不到的結果。如何正確地將Get-Childitem的結果傳遞給Scriptblock?
C:\temp
包含3個文件:
- A.TXT
- B.txt
- C.txt
我想是通過$files
到腳本塊在這裏,保持Get-ChildItem
已返回的三個文件的整個列表。換句話說,我希望$files
能夠在腳本塊內部和外部返回A.txt,B.txt和C.txt。
我能夠做到這一點,但我無法做到可靠,並且無法解釋原因。我不想依賴一個「虛擬」變量來使其正常工作,我想了解它們之間的區別。
第一個例子這裏返回的所有文件:
$files = Get-ChildItem -Path "C:\temp"
$test = $files.Get(0)
Write-Host $files.Count
Start-Job -ScriptBlock {
Param($test, $files)
Write-Host $files.Count
} -ArgumentList $test, $files | Out-Null
Wait-Job * | Out-Null
$results += Get-Job | Receive-Job
第二個例子只傳遞A.TXT到腳本塊:
$files = Get-ChildItem -Path "C:\temp"
Write-Host $files.Count
Start-Job -ScriptBlock {
Param($files)
Write-Host $files.Count
} -ArgumentList $files | Out-Null
Wait-Job * | Out-Null
$results += Get-Job | Receive-Job
有人可以幫助解釋正確的方式做這個?
你應該使用foreach循環。並迭代每個值,並最終做到這一點的操作。 –
@Ranadip Dutta這裏的問題是,在第二個示例中,只有一個文件傳遞到scriptblock,儘管看起來我已經像第一個例子那樣處理了,而第一個例子通過了所有文件。 –