PowerShell - 向数组添加列

时间:2011-10-18 16:20:53

标签: powershell

假设您正在做这样的事情:

$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映射(如果有的话)以及该磁盘上的各个分区。

1 个答案:

答案 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
            }