PowerShell 'if' mecanismo dependente do estado da VM

2

Sou novo no PowerShell e estou tentando escrever um script que depende do status de uma VM do Hyper-V. Aqui está minha declaração (básica) if:

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

Eu sinto que tem que haver uma maneira melhor de fazer isso, mas eu não sei o que é. Eu não acho que isso é uma má maneira de fazer isso, mas como eu estou tentando aprender, eu gostaria de saber se há uma maneira melhor e se isso é uma maneira ruim de fazendo isso, por que.

EDITAR:

Como mencionado na primeira resposta, minha única ideia era converter em uma string para verificar as propriedades do objeto em relação a algo que estou procurando. Eu gostaria que houvesse uma maneira de fazer isso sem converter minha saída em uma string, e é essencialmente isso que estou procurando.

    
por MagnaVis 24.08.2017 / 17:03

1 resposta

4

O Format-* cmdlets (seu fl é Format-List ) deve formatar a saída para visualização no console. Não volte a analisá-los para valores. Colete os objetos retornados pelo Get-VM e acesse as propriedades diretamente.

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

E se você não quiser armazenar o objeto da VM por algum motivo, também é possível criar um shorthand assim.

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

I don't think this is a bad way of doing it

É uma maneira ruim de fazer isso, mas não é sua culpa. É comum que os Powershellers iniciantes entrem e comecem a tentar entender todas as coisas. Sem se aprofundar muito nos objetos do Powershell, a pior parte dessa abordagem é que você perde a utilidade embutida (propriedades, métodos, capacidade do pipeline) para o objeto retornado por Get-VM .

    
por 24.08.2017 / 17:15