parens对powershell Get-Content cmdlet的影响

Jos*_*ell 3 powershell cmd powershell-2.0

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

以下是相关代码的示例.

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

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

Ric*_*ard 5

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

是.

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

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

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