Нужна помощь в получении информации с узлов HyperV с помощью Powershell

308
CuriousPiyush

Ниже мой скрипт для получения информации. Я получаю OSStatus и время безотказной работы как пустым в выводе. Может кто-то Пожалуйста, помогите мне получить вывод с помощью «Get-VM | Select-Object -ExpandProperty NetworkAdapters» и укажите, какую ошибку я здесь делаю.

$clus = Read-Host 'Enter the Cluster Name' $Nodes = Get-clusternode -Cluster $clus foreach($Node in $Nodes) { $VMs = Get-VM | Select-Object -ExpandProperty NetworkAdapters | Select VMName, IPAddresses, State foreach($VM in $VMs) { $results = [ordered]@{  'NodeName' = $Node;  'VMName' = $VM.VMName;  'IPaddress' = $VM.IPAddresses[0]; 'Status' = $VM.State; 'AdapterStatus' = $VM.Status[0]; 'OSStatus' = $VM.OSStatus; 'Uptime' = $VM.Uptime } $Output = New-Object -TypeName PSObject -Property $results Write-Output $Output }  } 

Я также хотел бы знать, можем ли мы получить выходные данные из отдельных циклов foreach, поместить их в один массив и отформатировать для вывода в конце вывода.

Ниже вывод, который я получаю. Бланк для OSStatus и Uptime.

NodeName : ABC VMName : System1 IPaddress : 192.168.1.6 Status : Running AdapterStatus : Degraded OSStatus :  Uptime :   NodeName : ABC VMName : System2 IPaddress : 192.168.1.7 Status : Running AdapterStatus : Degraded OSStatus :  Uptime :   NodeName : ABC VMName : System3 IPaddress : 192.168.1.8 Status : Running AdapterStatus : Degraded OSStatus :  Uptime :  
0

1 ответ на вопрос

0
SimonS

Кажется, что некоторая информация, которая вам нужна, выводится Get-VMи теряется при выборе только свойства NetworkAdapters. Вот почему я изменил это ниже. теперь он перебирает виртуальную машину и выбирает свойство NetworkAdapters во время цикла.

Я также:

  • Положите все в PSCustomObjectпрямой, так что нет необходимости New-Objectили[ordered]
  • Поместите $resultsпеременную перед foreachциклом
  • Добавлен | ft -Autosizeв ваш файл, Write-Outputпоэтому он форматирует его так, как вы хотите (если вы хотите использовать вывод скрипта далее в вашем скрипте, удалите его | ft -autosizeснова, это будет полезно только по косметическим причинам)
  • Уточняется ClusterObjectв вашем Get-VM- я не уверен, что так как я не работаю с кластерами, но я думаю, вы должны указать эту информацию, в противном случае он будет читать только местную ВМ, никогда с удаленным кластера.
  • Не было собственности для OSStatus. Я думаю, что вы имели в виду OperationalStatus. Я изменил это на это.

Вот код

$clus = Read-Host 'Enter the Cluster Name' $Nodes = Get-clusternode -Cluster $clus $results = @() foreach($Node in $Nodes) { $VMs = Get-VM -ClusterObject $Node foreach($VM in $VMs) { $VMtmp = $VM | select -expand NetworkAdapters $results += [PSCustomObject]@{ 'NodeName' = $Node;  'VMName' = $VM.VMName;  'IPaddress' = $VMtmp.IPAddresses[0]; 'Status' = $VM.State; 'AdapterStatus' = $VMtmp.Status[0]; 'OSStatus' = $VM.OperationalStatus[0]; 'Uptime' = $VM.Uptime } }  } Write-Output $results | ft -AutoSize 
Большое спасибо, Саймон. Это работает и очищает мои сомнения, а также. CuriousPiyush 6 лет назад 0