使用 get-content 将计算机信息导出到 CSV 文件

Export computer info to CSV file using get-content

我希望得到一些帮助,让我称之为简单的脚本正常工作,但我已经达到 PS 知识的上限。我发现了一些帖子,其他人试图做类似的事情,但对我没有帮助。

我的概念是将数据输出到每台计算机的 CSV 文件中,但每台计算机的信息是相同的。我已经多次修改脚本,但我现在没有想法了。我是 运行 PS 5.0。这是我目前所拥有的:

$Computers = get-content "C:\Users\test\documents\computers.txt"
$ExportLocation = "C:\Users\test\documents"

$Score = Get-CimInstance Win32_ReliabilityStabilityMetrics | measure SystemStabilityIndex -Average | select-object -ExpandProperty Average
$Manufacturer = Get-ComputerInfo | select -ExpandProperty "CsManufacturer"
$Output = foreach ($Computer in $Computers) {
    New-Object -TypeName PSObject -Property @{
    ComputerName = $Computer
    StabilityScore = $Score
    Manufacturer = $Manufacturer

  } | Select-Object ComputerName,StabilityScore,Manufacturer
}
$Output | Export-CSV $ExportLocation\StabilityResults.csv -Append -Force -Encoding ASCII -NoTypeInformation

如有任何帮助,我们将不胜感激!

我相信你想从远程计算机收集信息,对吧? 当前您正在从本地计算机收集 Score 和 Manufacturer,并在前面放置一个不同的计算机名称。

我会这样做,并解释原因:

$Computers = get-content "C:\Users\test\documents\computers.txt"
$ExportLocation = "C:\Users\test\documents"

$Output = Invoke-Command -ComputerName $Computers {
    [PSCustomObject]@{
        ComputerName = $env:COMPUTERNAME
        Score = (Get-CimInstance Win32_ReliabilityStabilityMetrics | measure SystemStabilityIndex -Average).Average
        Manufacturer = (Get-CimInstance -ClassName Win32_ComputerSystem).Manufacturer
    }
} | Select-Object ComputerName,Score,Manufacturer

$Output | Export-CSV $ExportLocation\StabilityResults.csv -Append -Force -Encoding ASCII -NoTypeInformation

我会使用 Invoke-command 访问远程计算机,因为它会并行向 32 台计算机发送命令(默认情况下)。使用变量 Throttlelimit 可以增加或减少计算机的数量。

如果您使用像 foreach 这样的循环来执行此操作,您将按顺序 运行ning 它,这显然会更慢。

我已将 Get-ComputerInfo 替换为 (Get-CimInstance -ClassName Win32_ComputerSystem).Manufacturer,因为您会得到相同的结果,但速度更快。 Get-ComputerInfo 收集了太多信息,因此速度较慢。

变量$env:computername returns 来自远程机器的计算机名称。

给它一个 运行 并提供反馈。我希望解释清楚且有用!