PowerShell: как установить переменную из одного столбца в многостолбцовом выводе? - PullRequest
1 голос
/ 30 марта 2019

Я использую Get-PhysicalDisk | Format-Table DeviceID, UniqueID, чтобы получить список номеров дисков и серийных номеров всех дисков на сервере Windows 2016.Я хочу найти один серийный номер и записать только номер диска в качестве переменной.Я привык к awk в UNIX, и я полностью ошеломлен, как добиться этого в PowerShell.

Get-PhysicalDisk | Format-Table DeviceID, UniqueID

DeviceID UniqueID                              
-------- --------                              
5        624A937024897B4FF488CBF800027A4B      
8        624A937024897B4FF488CBF800028A4D      
7        624A937024897B4FF488CBF800027A59      
0        {c4d394f5-509e-11e9-a834-806e6f6e6963}
1        {c4d394f6-509e-11e9-a834-806e6f6e6963}
2        {c4d394f7-509e-11e9-a834-806e6f6e6963}
3        {c4d394f8-509e-11e9-a834-806e6f6e6963}
4        {c4d394f9-509e-11e9-a834-806e6f6e6963}
6        624A937024897B4FF488CBF800027A56

Я хочу развернуть эту команду, чтобы найти SerialNumber 624A937024897B4FF488CBF800027A56, а затем установить переменную с именем $DriveNumber до значения 6, как показано на выходе.

Затем я планирую использовать эту переменную в Set-Disk, чтобы перевести диск в автономный / онлайн-режим для перезаписи тома.Я не хочу жестко кодировать номер диска, потому что после перезагрузки номер диска может измениться.
ПРИМЕЧАНИЕ Я использовал Get-Disk и передавал соответствующий вывод в Set-Disk для выполнения моего приводавыкл / онлайн.Но у меня есть таинственная проблема с виртуальными дисками, которые не отображаются с Get-Disk, поэтому я пытаюсь найти обходной путь с Get-PhysicalDisk Спасибо!

1 Ответ

2 голосов
/ 30 марта 2019
$driveNumber = (
  Get-PhysicalDisk | Where-Object UniqueId -eq '{624A937024897B4FF488CBF800027A56}'
).DeviceId

Обратите внимание на необходимость заключить строку GUID в {...}.

Как и все командлеты PowerShell, Get-PhysicalDisk выводит объекты , свойства которых можно запросить.

Командлет Where-Object действует как фильтр для объектов, которые он получает от конвейера, и сравнивает значение свойства UniqueId с указанным литералом GUID (строка), который, по определению, соответствует (максимум) один объект.

(...).DeviceId возвращает значение свойства DeviceId целевых объектов и присваивает его переменной $driveNumber.


Примечание об использовании Format-* командлетов, таких как Format-Table:

Всегда используйте Format-* командлетов для форматирования экрана .

Если намерение дальше программная обработка :

  • либо: просто получить доступ к внутренним свойствам входных объектов (доступность которых не зависит от того, отображают ли они по умолчанию или посредством вызова командлета Format-*)

  • или: , если вам нужно создать упрощенные или преобразованные объекты только с подмножеством исходных свойств и / или значений свойств преобразованных свойств ( вычисленных свойств , используйте Select-Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...