【问题标题】:How can I use PowerShell to get RAM / Memory details of multiple computers?如何使用 PowerShell 获取多台计算机的 RAM / 内存详细信息?
【发布时间】:2017-03-29 10:33:04
【问题描述】:

我需要清点文本文件中列出的计算机的 RAM。我有这个脚本:

$($servers = Get-Content D:\123.txt

Foreach ($s in $servers) {
    $s
    get-wmiobject Win32_Processor -ComputerName $s -ErrorAction SilentlyContinue| select Name | Format-List
    Get-WmiObject win32_baseboard -ComputerName $s -ErrorAction SilentlyContinue| Select product | Format-List

    $colRAM = Get-WmiObject -Class "win32_PhysicalMemory" -namespace "root\CIMV2" -computerName $s

    $colRAM | ForEach {
           “Memory Installed: ” + $_.DeviceLocator
           “Memory Size: ” + ($_.Capacity / 1GB) + ” GB”       
           $SlotsFilled = $SlotsFilled + 1
           $TotMemPopulated = $TotMemPopulated + ($_.Capacity / 1GB)
    }

    Write-Host "_____________________________________ "
}) *>&1 > output.txt

返回这个结果:

电脑1

名称:Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz

产品:DG31PR

安装的内存:J6H2 内存大小:1 GB

我希望结果是这样并导出为 CSV:

Name      TotalRam      Type      Motherboard
comp1     2gb           ddr3      h81m-k
comp2     2gb           ddr3      h81m-k
          2gb
comp3     1gb           ddr2      DG31PR
          0,5gb

【问题讨论】:

    标签: powershell csv ram


    【解决方案1】:

    这是您脚本的修改版本,以获得您请求的结果。

    #For more types https://msdn.microsoft.com/en-us/library/aa394347(v=vs.85).aspx
    $memtype = @{
        0 = 'Unknown'
        1 = 'Other'
        2 = 'DRAM'
        20 = 'DDR'
        21 = 'DDR-2'
        22= 'DDR2 FB-DIMM'
        24 = 'DDR3'
        25 = 'FBD2'
    }
    
    $Result = @()
    
    $servers = Get-Content D:\123.txt
    
    
    Foreach ($s in $servers) {
    
        $Motherboard = (Get-WmiObject win32_baseboard -ComputerName $s -ErrorAction SilentlyContinue).product 
        $colRAM = Get-WmiObject -Class "win32_PhysicalMemory" -namespace "root\CIMV2" -computerName $s
    
        $TotMemPopulated = 0
        $SlotsFilled = 0
    
        $colRAM | ForEach-Object {
            $SlotsFilled = $SlotsFilled + 1
            $TotMemPopulated = $TotMemPopulated + ($_.Capacity / 1GB)  
    
            $Props =[ordered]@{        
                Name = $s
                TotalRam = "$TotMemPopulated`gb"
                Type = $memtype[[int]$_.MemoryType]
                MotherBoard = $Motherboard
            }
            $Object = New-Object -TypeName PSCustomObject -Property $Props
    
        }
    
        $Result += $Object
    }
    
    $Result | Export-CSV RamReport.csv
    

    说明:

    $memtype 是一个哈希表,它将 MemoryType 数字从 win32_PhysicalMemory WMI 类转换为友好名称。根据环境中 RAM 的种类,您可能需要添加对该哈希表的更多引用(我提供了数字代码引用的链接)。

    $result 被定义为一个空数组,在脚本期间用于将结果整理到一个对象中。

    该脚本创建一个对象为$object,其中包含您希望整理的属性的哈希表,然后将每个对象添加到 $result 集合中。这是一个有序的哈希表,因此我们尊重您在最终输出中请求的列顺序。

    最后我们使用Export-CSV$result导出为CSV。

    【讨论】:

    • 效果很好!但是我们可以定义 ram 的数量,例如 2x1gb 吗?
    • 您可以将其添加到 $props :NumberOfDimms = $colRAM.Count 这可以让您计算出有多少个调光器,但它不会告诉您它们的确切大小。为了确定这一点(因为它们可能不匹配),您需要单独记录每个 dimm 的大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多