Назад | Перейти на главную страницу

Механизм if PowerShell, зависящий от состояния виртуальной машины

Я новичок в PowerShell и пытаюсь написать сценарий, который зависит от состояния виртуальной машины Hyper-V. Вот мой (основной) оператор if:

if((get-vm WMDC2 | out-string) -like '*Running*') { echo "running"}

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

РЕДАКТИРОВАТЬ:

Как упоминалось в первом ответе, моя единственная идея заключалась в том, чтобы преобразовать в строку, чтобы проверить свойства объекта на то, что я ищу. Я бы хотел, чтобы был способ сделать это без преобразования вывода в строку, и это, по сути, то, что я ищу.

В Format-* командлеты (ваш fl является Format-List) предназначены для форматирования вывода для просмотра в консоли. Не выполняйте повторный синтаксический анализ их значений. Соберите объект (ы), возвращенный Get-VM и получить доступ к свойствам напрямую.

# Get the VM object
$vm = Get-VM WMDC2
# check if the 'state' property equals 'Running'
if ($vm.state -eq 'Running') {
   Write-Host 'Running'
}

И если вы по какой-то причине категорически не хотите хранить объект виртуальной машины, вы также можете сократить его так.

if ((Get-VM WMDC2).state -eq 'Running'){
  Write-Host 'Running'
}

Я не думаю, что это плохой способ сделать это

Это плохой способ сделать это, но это не ваша вина. Часто начинающие Powershellers прыгают и начинают пытаться все натянуть. Не углубляясь слишком далеко в объекты Powershell, худшая часть этого подхода заключается в том, что вы теряете встроенную полезность (свойства, методы, конвейерные возможности) объекта, возвращаемого Get-VM.