使用 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 来自远程机器的计算机名称。
给它一个 运行 并提供反馈。我希望解释清楚且有用!
我希望得到一些帮助,让我称之为简单的脚本正常工作,但我已经达到 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 来自远程机器的计算机名称。
给它一个 运行 并提供反馈。我希望解释清楚且有用!