在Get-Content cmdlet周围放置parens有什么影响?为什么我可以用parens读取和写入同一个文件但不是没有?
以下是相关代码的示例。
powershell -command "(Get-Content SomeFile.sql) | ForEach-Object { $_ -replace \"BEFORE\", \"AFTER\" } | Set-Content SomeFile.sql"
Get-Content cmdlet是否保留文件句柄,直到默认执行整个命令为止?
答案 0 :(得分:5)
Get-Content cmdlet是否保留在文件句柄
上
是
如果没有parens,每次Get-Content
输出一个对象(即文件中的一行文本)时,都会运行管道。
另一方面,对于parens,Get-Content
将运行完成,为整个文件创建一个字符串数组,然后为每一行运行管道。
因此在前一种情况下,文件将保持打开状态,而在第二种情况下,整个文件将被读入内存。
答案 1 :(得分:0)
如果没有parens,Get-Content会打开文件进行读取,但同时您实际上会尝试写入同一文件。
Parens强制阅读操作完成,然后进入下一阶段,将内容传递给管道。