parens对powershell Get-Content cmdlet的影响

时间:2013-03-13 15:41:27

标签: powershell cmd powershell-v2.0

在Get-Content cmdlet周围放置parens有什么影响?为什么我可以用parens读取和写入同一个文件但不是没有?

以下是相关代码的示例。

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

Get-Content cmdlet是否保留文件句柄,直到默认执行整个命令为止?

2 个答案:

答案 0 :(得分:5)

  

Get-Content cmdlet是否保留在文件句柄

如果没有parens,每次Get-Content输出一个对象(即文件中的一行文本)时,都会运行管道。

另一方面,对于parens,Get-Content将运行完成,为整个文件创建一个字符串数组,然后为每一行运行管道。

因此在前一种情况下,文件将保持打开状态,而在第二种情况下,整个文件将被读入内存。

答案 1 :(得分:0)

如果没有parens,Get-Content会打开文件进行读取,但同时您实际上会尝试写入同一文件。

Parens强制阅读操作完成,然后进入下一阶段,将内容传递给管道。