Ниже мой скрипт для получения информации. Я получаю 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        : 

1 ответ1

0

Кажется, что некоторая информация, которая вам нужна, находится в выходных данных 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .