在 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
我想在 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