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

Set-Content 是那些核心的 PowerShell 命令之一,我不能没有它。我还记得在我们能够使用 PowerShell 写入文件之前,我曾经使用 VBScript。我记得总是试图记住我需要使用什么样的对象和方法名。是 FileSystemObjectFileObject 还是其他的什么?那真是令人头疼!即使我记得方法名是 CreateTextFile(),我总是忘记在第二个参数中添加 True

这就是我所说的怪物的例子。

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

输出到文件

一个可以输出到文件的 cmdlet 是 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 是那些经常被使用的核心 cmdlet 之一。它并不花哨,但每次都有效,是您 PowerShell 技能库中应该具备的工具之一。

要了解完整的细节,请查阅微软的文档:Set-Content

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