在 Powershell 中创建动态哈希表

Creating a dynamic hashtable in Powershell

我想在 Powershell 中创建本地计算机的概览并通过散列 table 在 JSON 中输出它。现在它可以有多个硬盘并且必须在散列 table.

中动态创建

我的代码:

$name = (Get-WmiObject -Class Win32_ComputerSystem -Property
Name).Name     @{foreach ($Disk in $Disk) { $stats.Add("$platten", $Disk[0].VolumeName) }

       stats = @{ $name= @{
                 CPUusage = $CPU
                 RAMusage = $ram
                 disknames = $disknames[1]
                 SSDsum = $ssdsum
                 HDDsum = $hddsum
                 Disksum = $disksum
              }
              $disk1 = @{

              }

              $disk2 = @{

              }

              $disk3 = @{

              }
            }}    

现在我询问硬盘驱动器并将它们保存在一个哈希 table 中。然后 foreach 循环应该遍历每个磁盘并将数据输入另一个哈希 table.

然后出现错误,我尝试将其放入哈希table,但没有成功..

如果您创建哈希表,它通常具有固定大小

初始化变量 $disknames 如:

$disknames = New-Object System.Collections.ArrayList

然后您可以像您尝试的那样添加条目

你的问题很不清楚,结尾不完整。不过,我认为这可能对您有所帮助:

$ComuterSystem = Get-CimInstance -ClassName Win32_ComputerSystem  

$Result = foreach ($Computer in $ComuterSystem) {
    $LogicalDisk = Get-CimInstance -ClassName win32_logicaldisk -ComputerName $ComuterSystem.Name

    # Create a new hashtable for each computer
    $diskHash = @{}

    # Foreach disk of that computer add it to the hashtable
    foreach ($disk in ($LogicalDisk.Where({$_.DeviceID}))) {
        $diskHash.Add($disk.DeviceID, $disk.Size)
    }

    [PSCustomObject]@{
        Name = $Computer.Name
        Model = $Computer.Model
        Manufacturer = $Computer.Manufacturer
        # Easiest is to simply store all data:
        LogicalDisk = $LogicalDisk
        # Or store the hashtable with your key value pair
        Disks = $diskHash
        # Or store a selection of what you need
        Selection = $LogicalDisk | Select-Object DeviceID, VolumeName, Size, FreeSpace
    }
}

$Result

$Result.Disks

$Result.LogicalDisk

$Result.Selection