【问题标题】:Power Shell Simple ScriptPowershell 简单脚本
【发布时间】:2021-10-29 00:21:31
【问题描述】:

我是 Stack Over flow 的新手,不知道如何开始。 我的组织中有大约 1500 台 PC 我想要的是在 PowerShell 中编写一个简单的脚本,该脚本将从文本文件中获取计算机列表作为输入,获取我的函数信息并将信息保存到 CSV 文件作为输出。

我正在尝试查找 RAM 模块容量 例如,如果您键入

WMIC /NODE:MachineName Memorychip get capacity

它会给你远程PC的每个模块容量大小;例如,我有一个系统,其中安装了 4 个 RAM 模块,每个 8 GB,因此输出将是

Capacity
8589934592
8589934592
8589934592
8589934592

表示 4 个插槽,每个插槽为 8 GB

我想要的是使用这个简单的命令在命令行或 PowerShell 中编写脚本(首选 PowerShell)。

更具体地说,这是我现在正在尝试的内容

$Result = @()
$servers = Get-Content "L:\Data.txt"
Foreach ($s in $servers) {
    $Disk = (WMIC /NODE:$s MemoryChip Get Capacity) 
    $Object = New-Object -TypeName PSCustomObject -Property $Disk
    }
    $Result += $Object
}
$Result | Export-CSV "L:\RAMReport.csv" -NoTypeInformation -Encoding UTF8

希望我的问题能切中要害

非常感谢您的帮助

【问题讨论】:

  • Get-WmiObject -Class Win32_PhysicalMemory -ComputerName $s -Property Capacity 而不是WMIC.exe 有什么问题?或者(从 PowerShell 3.0 开始)此 cmdlet 已被 Get-CimInstance 取代?
  • 感谢 cmets,但问题是它提供了总容量,我需要的是每个 RAM 插槽的单独容量,我也有 System Center,但它也提供了总容量,在我的情况下不需要
  • 如果有更好的方法来获得理想的结果,那就太好了

标签: powershell-3.0


【解决方案1】:

也许以下(部分注释)脚本可能会导致所需的解决方案:

$servers = Get-Content "L:\Data.txt"
$Result = Foreach ($s in $servers) {
    $Disk = (WMIC /NODE:"""$s""" MemoryChip Get Capacity) |
        #                ↑↑  ↑↑ remove if $s is already a quoted string
        Where-Object {$_ -ne ''}
    $Prop = @{
        'server' = $s
        "$($Disk[0].Trim())MB" = ($Disk | 
            Select-Object -Skip 1 |
                ForEach-Object { [UInt64]$_ / 1Mb }) -join ' '
    }
    New-Object -TypeName PSCustomObject -Property $Prop
}
$Result # | Export-Csv "L:\RAMReport.csv" -NoTypeInformation -Encoding UTF8
#       ↑ uncomment to export data to a CSV file

解释:

  • $Result += $Objectvery expensive array operation
  • wmic /node:"srv-12" MemoryChip Get /Value 如果包含某些字符(例如 Hyphen-Minus),则需要用双引号引起来的服务器名称。

输出(不将数据导出到 CSV 文件)可能如下所示:

server   CapacityMB
------   ----------
server1  8192 8192
server_2 8192 8192 8192 8192
server-3 8192 

【讨论】:

  • 非常感谢 Josefz 为我指明了正确的方向。昨天晚上我从我的 AD 应用了这个脚本并扫描了所有的 vlan,早上得到了所需的结果。
  • 顺便说一句,昨天晚上我也向微软询问了有关系统中心的问题,发现我可以从机器名称下的物理内存子树中看到物理内存插槽的容量,再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-10-18
相关资源
最近更新 更多