假设您正在做这样的事情:
$partitions = get-wmiobject -query "Associators of {Win32_DiskDrive.DeviceID=""$DevID""} WHERE AssocClass = Win32_DiskDriveToDiskPartition" -computer $ComputerName
如果你想获得每个磁盘的磁盘标题('C:'),你需要这样的东西:
function GetDiskCaption {
param ($Partition, $ComputerName)
$DeviceID = $Partition.DeviceID
$colLogicalDisk = get-wmiobject -query "Associators of {Win32_DiskPartition.DeviceID=""$DeviceID""} WHERE AssocClass = Win32_LogicalDiskToPartition" -computer $ComputerName
If ($colLogicalDisk.Caption -ne $null) {
return $colLogicalDisk.Caption
}
Else {
return "UNASSIGNED"
}
}
我不是一个非常高级的PowerShell用户,所以问题是:将磁盘标题添加到阵列以便将它管道输入到ft或其他脚本中的最佳PowerShell方法是什么?
现在我意识到我可以做一个foreach循环来打印出来,但我想弄清楚如何使用额外的列扩展数组,以便我可以使用管道运算符来格式化数组。
Microsoft站点上关于数组处理的示例都基于一维数组,因此添加数组似乎不是答案。
我正在尝试编写一个脚本来转储磁盘列表,以及它们的iSCSI映射(如果有的话)以及该磁盘上的各个分区。
答案 0 :(得分:6)
您可以使用哈希表(关联数组):
$hash = @{}
$partitions | %{ $caption = GetDiskCaption $_ $computername; $hash[$caption]=$_ }
$hash
或创建对象:
$combined = $partitions | %{ $caption = GetDiskCaption $_ $computername
$obj = new-object psobject
$obj | add-member -name caption -type noteproperty -value $caption
$obj | add-member -name partition -type noteproperty -value $_
$obj
}