需要帮助使用 Powershell 从 HyperV 节点获取信息

需要帮助使用 Powershell 从 HyperV 节点获取信息

下面是我获取信息的脚本。输出中 OSStatus 和 uptime 为空白。有人能帮我使用“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

似乎您需要的一些信息在输出中,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

相关内容