如何将 WmiObject -Class win32_logialdisk 或其他 WmiIbjects 保存在 PowerShell 数组中并保存在 CSV 中

How to save WmiObject -Class win32_logialdisk or others WmiIbjects in a PowerShell array and save in CSV

我尝试在 CSV 文件中提取 Get-WmiObject -Class Win32_LocalDisk 的值,但我得到的是 CSV 而不是仅获取 SystemObject[].

的值

stat3.csv 文件包含:

"#TYPE System.Management.Automation.PSCustomObject,
"Disk"
"10.10.0.177","System.Object[]"

如何获取值而不是 System.Object[] 字符串?

  $list = gc D:\Foo\script\bahh.txt 

  foreach ($line in $list) {

    $creds = get-credential
    echo $IP
    $creds = Get-Credential
    $disk = Get-WmiObject -Class Win32_LogicalDisk -ComputerName $IP |
            ft DeviceID, @{Name="Free Disk Space (GB)";e={$_.FreeSpace /1GB}},
              @{Name="Total Disk Size (GB)";e={$_.Size /1GB}} -AutoSize

     $data | Add-Member NoteProperty -Name Disk -Value $disk

     $data | Export-Csv "D:\Foo\script\stat3.csv" 
  }
}

假设您的文件中有一个简单的 IP 地址或计算机名称列表 bahh.txt,您可以这样做:

$list = Get-Content -Path 'D:\Foo\script\bahh.txt'

$Results = foreach($IP in $list){
   $disks = Get-WmiObject -Class win32_logicaldisk -ComputerName $IP
   $CmpSstm = Get-WmiObject -Class win32_computersystem -ComputerName $IP
   foreach($disk in $Disks){ 
        [PSCustomObject]@{
            'IP Address' = $IP
            'DeviceID' = $disk.DeviceID
            'Free Disk Space (GB)' = $disk.FreeSpace/1GB
            'Total Disk Size (GB)' = $disk.Size/1GB
            'Physical Processors' = $CmpSstm.NumberofProcessors
            'Logical Processors' = $CmpSstm.maxclockspeed
            'TotalPhysicalMemory (GB)' = [math]::truncate($CmpSstm.TotalPhysicalMemory /1GB)
        }
    }
}

$Results | Export-Csv -Path  'D:\Foo\script\stat3.csv'