2013-03-13 41 views
3

將parens放在Get-Content cmdlet的效果如何?爲什麼我可以使用parens讀取和寫入同一個文件,但不是沒有?parens對powershell的影響Get-Content cmdlet

以下是有問題的代碼示例。

powershell -command "(Get-Content SomeFile.sql) | ForEach-Object { $_ -replace \"BEFORE\", \"AFTER\" } | Set-Content SomeFile.sql" 

Get-Content cmdlet是否持有文件句柄,直到默認執行完整個命令爲止?

回答

5

是Get-Content命令持有到文件句柄

是。

如果沒有參數,每次都會運行管道Get-Content輸出一個對象(即文件中的一行文本)。

另一方面,對於零件,Get-Content將運行至完成,爲整個文件創建一個字符串數組,然後爲每一行運行管線。

所以在前一種情況下,文件將保持打開狀態,而在第二種情況下,整個文件將被讀入內存。

+0

感謝您的好評! – 2013-03-13 17:25:05

0

沒有參數,Get-Content打開文件進行讀取,但同時你幾乎試圖寫入同一個文件。

Parens在進入下一階段之前強制讀取操作完成,將內容通過管道傳遞。