3

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

这是相关代码的示例。

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

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

4

2 回答 2

5

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

是的。

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

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

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

于 2013-03-13T15:53:16.173 回答
0

如果没有括号,Get-Content 会打开文件以供读取,但同时您实际上会尝试写入同一个文件。

Parens 强制读取操作在进入下一个阶段之前完成,通过管道传递内容。

于 2013-03-13T16:06:14.247 回答