Использование PowerShell для добавления пользовательских свойств к виртуальным машинам Hyper-V
Одной из наиболее недооцененных функций System Center Virtual Machine Manager является возможность связывания пользовательских свойств с виртуальными машинами. Пользовательские свойства позволяют хранить собственные пары ключ/значение в атрибутах виртуальной машины. Например, я недавно слышал, что кто-то использует настраиваемые свойства в качестве механизма хранения даты истечения срока действия для виртуальных машин. Точно так же настраиваемое свойство может использоваться для хранения имени человека или отдела, создавшего виртуальные машины, чтобы различать производственную и лабораторную виртуальные машины или для перечисления гостевой ОС виртуальной машины или приложений, которые запускает виртуальная машина.
Конечно, вы можете создавать настраиваемые свойства или управлять ими из консоли Virtual Machine Manager. Для этого перейдите в рабочую область «Виртуальные машины и службы», щелкните правой кнопкой мыши виртуальную машину и выберите команду «Свойства» в контекстном меню. Настраиваемые свойства перечислены на странице свойств виртуальной машины на вкладке Настраиваемые свойства, которую вы можете видеть на рисунке ниже.
Взглянув на рисунок выше, вы заметите кнопку с надписью Manage Custom Properties. Нажав на эту кнопку, вы попадете на экран, который позволяет вам создавать свои собственные именованные пользовательские свойства. Если вы посмотрите на снимок экрана, показанный ниже, вы заметите, что экран «Управление пользовательскими свойствами» содержит доступное свойство с именем «Владелец». Я создал это свойство, нажав кнопку «Создать» и введя «Владелец». Если бы я хотел назначить это настраиваемое свойство виртуальным машинам, я бы просто выбрал его и щелкнул «Добавить».
После добавления свойства «Владелец» к виртуальной машине оно отображается в списке настраиваемых свойств виртуальной машины, как показано ниже. Теперь я могу добавить значение свойства, если захочу.
Пользовательские свойства в PowerShell
Итак, теперь, когда я показал вам, как работают настраиваемые свойства, давайте посмотрим, как использовать настраиваемые свойства в PowerShell. Стоит отметить, что я работаю из командной оболочки диспетчера виртуальных машин.
Если бы я хотел увидеть список всех настраиваемых свойств, существующих в диспетчере виртуальных машин, я мог бы использовать эту команду:
Get-SCCustomProperty | Select-Object Name
Как вы можете видеть на рисунке ниже, часть команды Select-Object Name фильтрует вывод, так что PowerShell отображает только имя пользовательского свойства.
Теперь давайте предположим, что мы хотим создать совершенно новое пользовательское свойство под названием GuestOS. Для этого мы могли бы использовать командлет New-SCCustomProperty. Командлет требует, чтобы мы указали имя нового настраиваемого свойства и тип объекта, к которому должно применяться это настраиваемое свойство. Поскольку мы назначаем настраиваемое свойство виртуальным машинам, тип объекта (который мы указываем с помощью параметра AddMember) будет установлен на виртуальную машину. Для этого используется команда:
New-SCCustomProperty -Name “GuestOS” -AddMember “VM”
На рисунке ниже показана эта команда в действии. На рисунке я использовал команду Get-SCCustomProperty, чтобы убедиться, что новое пользовательское свойство GuestOS действительно добавлено.
Связывание пользовательского свойства с виртуальными машинами
Хотя я создал новое настраиваемое свойство под названием GuestOS, ни одна из моих виртуальных машин в настоящее время не использует это настраиваемое свойство. Если я хочу связать настраиваемое свойство с виртуальной машиной и заполнить настраиваемое свойство значением, мне придется использовать командлет Set-SCCustomPropertyValue. Этот командлет требует, чтобы вы указали входной объект (имя виртуальной машины), имя пользовательского свойства и значение, которое вы хотите присвоить пользовательскому свойству. Однако есть одна загвоздка.
По какой-то причине этот командлет не позволит вам напрямую ввести имя виртуальной машины. Вместо этого вам нужно будет присвоить имя виртуальной машины переменной. На самом деле, если быть более точным с технической точки зрения, вы назначаете не только имя виртуальной машины, но и весь объект виртуальной машины System Center Virtual Machine Manager.
Точно так же вы не можете просто перечислить пользовательское свойство по имени. Вместо этого вы должны сослаться на него с помощью команды Get-SCCustomProperty, а затем назначить его переменной.
Предположим, например, что я хочу присвоить значение «Windows» свойству GuestOS на виртуальной машине с именем Sentinel. Первое, что мне нужно сделать, это настроить переменную, в данном случае $VM, чтобы она содержала объект виртуальной машины для Sentinel. Затем мне нужно настроить другую переменную (я использую $CustomProperty) и связать ее с командлетом Get-SCCustomProperty. Наконец, я мог затем сослаться на эти переменные вместе с желаемым значением Windows в последней строке кода. Вот как все это выглядит:
$VM = Get-SCVirtualMachine -Name «Страж»
$CustomProperty = Get-SCCustomProperty -Name «GuestOS»
Set-SCCustomPropertyValue -InputObject $VM -CustomProperty $CustomProperty -Value «Windows»
Вы можете увидеть эти команды в действии на рисунке ниже.
Как вы можете видеть на рисунке, PowerShell генерирует относительно подробный вывод. Но что, если прошло какое-то время, и я хочу увидеть значение свойства GuestOS? Ну, помните те переменные, которые я только что создал? Как оказалось, я могу повторно использовать эти переменные. Вот команда:
Get-SCCustomPropertyValue -InputObject $VM -CustomProperty $CustomProperty | Select-Object Name, Value
Вы можете увидеть вывод команды ниже:
С пользовательскими свойствами, по общему признанию, немного сложно работать в PowerShell, и поэтому вы, вероятно, не будете использовать PowerShell, если вам нужно настроить только одно или два свойства на ваших виртуальных машинах. Однако, если вам нужно массово назначить настраиваемые свойства или вы хотите заполнить настраиваемые свойства как часть процесса создания виртуальной машины, PowerShell — это то, что вам нужно.