使用获取内容

时间:2020-05-19 05:34:31

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0

我希望得到一些帮助,以使我可以轻松编写脚本,但是我已经达到了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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

我相信您想从远程计算机收集信息,对吗? 当前,您正在从本地计算机收集分数和制造商,并在前面放一个不同的计算机名称。

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

$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这样的循环来执行此操作,则将按顺序运行它,这显然会更慢。

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

变量$env:computername从远程计算机返回计算机名称。

运行并提供反馈。我希望这些解释清楚而有用!