如何从 VMware 获取服务器信息

How to get server information from VMware

我可以访问 VMWare GUI,我可以轻松导出所有列,例如正常运行时间、IP 地址、备注、DNS、GuestOs、状态、名称等。

我想要一个可以每天自动获取这些信息的脚本。所以我只能得到服务器名称、电源状态和 VMhost。出于某种原因,VMware 使提取该信息变得如此困难。我使用了下面的脚本,我想通过将上面提到的列添加到这个脚本中,我应该能够删除我需要的数据。但它不是那样工作的。有人可以告诉我如何获得这些信息吗?

谢谢,

Add-PSSnapin vmware.vimautomation.core
Connect-VIServer SERVERNAME
Get-VM|Select Name, VMHost, Id, PowerState
Exit 0

在深入研究系统并进行了许多小时的研究后,我找到了解决方案。我只是希望 VMWare 可以更容易地检索数据或至少改进手册。 以下代码创建两个文件;一个带有服务器信息,另一个带有正常运行时间信息。

Get-VM | select name,VMHost, @{ Name = "IP Addresses"; Expression = { $_.Guest.IPAddress }}, @{ Name = "PowerState"; Expression = { $_.Guest.State }} , @{ Name = "GuestOS"; Expression = { $_.Guest }}, Notes | Export-Csv -Path "HQstat.csv"
Get-Stat -Entity * -Stat sys.uptime.latest -Realtime -MaxSamples 1| Export-Csv -Path "HQtime.csv"

为什么不使用视图?他们拥有您需要的所有信息。下面的代码假定您已连接到 vCenter。

$vmView = Get-View -ViewType VirtualMachine -Property Name,Config,Guest,Runtime
$hostView = Get-View -ViewType HostSystem -Property Name
$date = Get-Date
Foreach ($vm in $vmView)
{
    If ($vm.Runtime.BootTime -ne $null)
    {
        $dateDiff = $date.Subtract($vmView.Runtime.BootTime)
    }
    Else
    {
        $dateDiff = $null
    }
    foreach ($h in $hostView)
    {
        If ($vm.Runtime.Host -eq $h.MoRef)
        {
            $tempHost = $($h.Name)
            Break
        }
    }
    $global:Export += @([PSCustomObject]@{
        VMName = $($vm.Name)
        ID = $($vm.Config.Uuid) #or use $($vm.MoRef)
        Host = $tempHost
        PowerState = $($vm.Guest.GuestState)
        IPAddress = $($vm.Guest.IPAddress)
        Notes = $($vm.Config.Annotations)
        UptimeMinutes = $($dateDiff.TotalMinutes)
        })

    $dateDiff = $null
    $tempHost = $null
}
$exportFileName = "C:\temp\VMInformation.csv"

$Export | Export-Csv $exportFileName -Force -NoTypeInformation