Power Shell 简单脚本

Power Shell Simple Script

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

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

WMIC /NODE:MachineName Memorychip get capacity

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

Capacity
8589934592
8589934592
8589934592
8589934592

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

我想要的是使用这个简单的命令在命令行或 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

希望我的问题能切题

非常感谢您的帮助

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

$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