使用 PowerShell Set-Content 寫入文件:完整指南

Set-Content 是 PowerShell 中不可或缺的核心指令之一。在我们能够使用 PowerShell 写入文件之前,我还记得使用 VBScript 的时候。我总是试图记住需要使用的对象类型和方法名。是 FileSystemObject,FileObject 还是其他什么?真是让人头疼!即使我记得方法名是 CreateTextFile(),我总是忘记将 True 添加为第二个参数。

下面是一个我所说的怪物般的 VBScript 示例。

Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="c:\file.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.Write "test string"
objFile.Close

将该 VBScript 与以下 PowerShell 进行比较:

Set-Content -Path 'C:\file.txt' -Value 'test string'

你更喜欢哪个?我选择 PowerShell!PowerShell 使用了一个名为 Set-Content 的单一指令。该指令使我们能够更轻松地使用 PowerShell 写入文件。这个 PowerShell 指令是一个内置指令,其目的就是写入文件。

它可能有一些参数可以稍微改变其行为,但它只专注于写入文件。不要与 Add-Content 混淆,它们很相似。Set-Content 覆盖整个文件,而 Add-Content 则 添加 到文件中。当我刚开始时,我多次吃过这方面的亏!

创建文件/覆盖文件

Set-Content 指令非常简单。下面是一个很好的示例。该示例显示 Set-Content 既可以创建文件(如果不存在),也可以替换预先存在文件中的所有内容。

PS> Test-Path -Path C:\test.txt
False
PS> Set-Content -Path C:\test.txt -Value 'foo'
PS> Get-Content -Path C:\test.txt
foo
PS> Set-Content -Path C:\test.txt -Value 'bar'
PS> Get-Content -Path C:\test.txt
bar

将输出写入文件

一個可以輸出到文件的命令是Out-File,但是Set-Content也可以執行相同的任務,只是稍微不同。

也許您想從一個文本文件中提取特定的文本片段並將行輸出到另一個文件。通過使用Get-ContentSet-Content,您可以實現這一目標。也許我有一個文本文件,每行都有一個服務器和它們的狀態。我想要讀取每個服務器的狀態並將其輸出到一個文件中。使用Get-Content讀取文件,然後使用Set-Content寫入文件,這是可能的。

PS> Get-Content -Path C:\test.txt
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: Up
PS> Get-Content -Path C:\test.txt | ForEach-Object {
>>> $srvName = $_.Split(' ')[0]
>>> Set-Content -Path "C:\$srvName.txt" -Value $_
}
PS> Get-ChildItem -Filter 'SRV*'
Directory: C:\
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/29/2017  12:38 PM             17 SRV1.txt
-a----       10/29/2017  12:38 PM             19 SRv2.txt
-a----       10/29/2017  12:38 PM             17 SRV3.txt

PS> Get-ChildItem -Filter 'SRV*' | Get-Content
SRV1 Status: Up
SRV2 Status: Down
SRV3 Status: Up

Set-Content是那些經常使用的核心命令之一。它並不花哨,但每次都能正常工作,這是您應該在PowerShell技巧包中擁有的一個命令。

有關詳細信息,請查看Set-Content的Microsoft文檔。

Source:
https://adamtheautomator.com/powershell-write-to-file/