#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. отлично, это был второй синтаксис, с которым я боролся. Я дошел до того, что просто подумал, что должен быть лучший способ. Первый, возможно, проще. Мне нужно будет изучить ассоциативные массивы.