2011-10-18 39 views
2

比方說,你在做這樣的事情: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用戶,所以這個問題是最新最好的PowerShell的方式向磁盤字幕添加到陣列,這樣可以把它管道進入,比如說,英尺或其它一些腳本?

現在我意識到我可以做一個foreach循環來打印出來,但我想弄清楚如何用額外的列擴展數組,以便我可以使用管道操作符來格式化數組。

MS站點上的數組處理示例都基於一維數組,因此添加數組似乎不是答案。

我特別試圖編寫一個腳本來轉儲出它們的iSCSI映射(如果有)和該磁盤上的各個分區的磁盤列表。

伊恩

回答

5

您可以使用一個哈希表(關聯數組):

$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 
      } 
+0

完美的,這是第二個語法我一直在爭取與。我剛剛認爲必須有更好的方法。第一個也許更簡單。我將不得不查看關聯數組。 – Ian