2011-10-18 6 views
2

に列を追加すると、あなたはこのような何かをやっているとしましょう:あなたは、各ディスク(「C」)のディスクキャプションを取得したい場合はのPowerShell - 配列

$partitions = get-wmiobject -query "Associators of {Win32_DiskDrive.DeviceID=""$DevID""} WHERE AssocClass = Win32_DiskDriveToDiskPartition" -computer $ComputerName 

をあなたが何かを必要としますこのように:

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のサイトでの配列処理の例はすべて1次元配列に基づいているため、配列の追加は答えのようではありません。

私は具体的には、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

完璧に、それは私が戦ってきた2番目の構文ました。私はちょうど良い方法でなければならないと思ったところまで行きました。最初の方が簡単かもしれません。私は連想配列を調べなければならないでしょう。 – Ian

関連する問題