PowerShell — добавление столбца в массив

#powershell

#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 добавить заголовок диска в массив, чтобы он мог передавать его, скажем, в ft или какой-либо другой скрипт?

Теперь я понимаю, что могу просто выполнить цикл foreach, чтобы распечатать это, но я хочу выяснить, как расширить массив дополнительными столбцами, чтобы затем я мог использовать операторы конвейера, скажем, для форматирования массива.

Все примеры на сайте Microsoft по обработке массивов основаны на одномерных массивах, поэтому добавление массивов, похоже, не является решением.

Я специально пытаюсь написать скрипт для вывода списка дисков с их отображением iSCSI (если таковые имеются) и различными разделами на этом диске.

Ответ №1:

Вы можете использовать хеш-таблицу (ассоциативный массив):

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

Комментарии:

1. отлично, это был второй синтаксис, с которым я боролся. Я дошел до того, что просто подумал, что должен быть лучший способ. Первый, возможно, проще. Мне нужно будет изучить ассоциативные массивы.