如何将数组的输出存储在文件中?

Ray*_*and 2 powershell scripting powershell-2.0 powershell-3.0 powershell-4.0

我有一个小的 powershell 脚本,可以远程从服务器收集指标。通常调用函数来收集 CPU / 内存 / HDD 信息。

我从文本文件中提取服务器,并为每台机器调用函数。

foreach ($i in Get-Content "C:\Servers.txt")
{{"=========================="; $i + "`n" + "==========================";
 "Number of CPU Cores" ; CPU-Info ; "Memory in GB" ; Memory-Info
  ; "HDDs in GB" ; HDD-Size } 
Run Code Online (Sandbox Code Playgroud)

首先,我尝试使用 outfile 所有内容,out-file但当然每个新输入都会覆盖我的文件。有没有办法临时存储输出并以一种好的方式输出它?

你会推荐什么?也许有更顺畅的方式来做到这一点?

小智 5

输出文件将用于什么目的?如果它是供人类消费的,那么 CSV 可能是您最好的选择,因为它易于导入 Excel。如果是为了准确表示对象,那么 XML 是一个更好的主意。这些类型中的每一种都有自己的导出 cmdlet:Export-CsvExport-Clixml

在使用这些 cmdlet 之一一次性导出所有数据之前,将所有输出添加到数组可能是一种更好的方法。我通常通过为循环的每次运行创建一个自定义对象来做这种事情:

$OutputFile = 'C:\Output.csv'

$ServerList = Get-Content 'C:\Servers.txt'

$OutputArray = @()

foreach ($i in $ServerList)
{
$ServerObject = New-Object PSObject

Add-Member -InputObject $ServerObject -MemberType NoteProperty -Name 'CPU_Cores' -Value (CPU-Info $i)
Add-Member -InputObject $ServerObject -MemberType NoteProperty -Name 'Memory_GB' -Value (Memory-Info $i)
Add-Member -InputObject $ServerObject -MemberType NoteProperty -Name 'HDD_Size' -Value (HDD-Size $i)

$OutputArray += $ServerObject
}

$OutputArray | Export-Csv -Path $OutputFile
Run Code Online (Sandbox Code Playgroud)