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