【问题标题】:Get snapshot information of vm PowerCLI获取 vm PowerCLI 的快照信息
【发布时间】:2018-07-12 07:17:55
【问题描述】:

我写了一个小脚本,它显示了一些关于虚拟机的信息。

    $vsms = Get-VM 
    $erg = $vsms | Select-Object -Property @{N="VmName"; E={$_.Name}}, 
                                   @{N="Power"; E={$_.PowerState}}, 
                                   @{N="CustomTag1"; E={$_.CustomFields.Item("CustomTag1")}}, 
                                   @{N="Customtag2"; E={$_.CustomFields.Item("Customtag2")}}, 
                                   @{N="Customtag3"; E={$_.CustomFields.Item("Customtag3")}}, 
                                   @{N="ProvisionedSpaceGB"; E={[math]::Round($_.ProvisionedSpaceGB)}}, `
                                   @{N="UsedSpaceGB"; E={[math]::Round($_.UsedSpaceGB)}}, 
                                   @{N="IP Address";E={@($_.guest.IPAddress[0])}}

$erg | Sort-Object VmName | Export-Csv $outputPath -NoType

我的问题是如何扩展此脚本 以获取有关还原点的信息(创建时间等...)。以及如何将结果导出为 csv,以便所有创建时间和其他属性都在每个 vm 的一个单元格/行中?结果应该像我已经做的那样导出为csv。 它应该是这样的:

VmName | SnapshotCreationTime| ... other properties
testvm | 19:17 01.02.18, 19:17 02.02.18,... | other properties
testvm2| 19:17 08.02.18, 19:17 02.03.18,... | other properties

不是:

VmName | SnapshotCreationTime| other properties (already in script)
testvm | 19:17 01.02.18,     | other properties
testvm | 19:17 02.02.18,     | other properties
testvm | 19:17 03.02.18,     | other properties
testvm2| 19:17 08.02.18,     | other properties
testvm2| 19:17 09.02.18,     | other properties
testvm2| 19:17 10.02.18,     | other properties

【问题讨论】:

    标签: powershell csv virtual-machine vmware snapshot


    【解决方案1】:

    您需要在您的快照日期属性中使用-Join

    例子:

    (Get-VM "VMName" | Get-View) | %{
    $Summary = "" | Select Name, HostName, State, NumCPU, MemoryMB, HDSizeKB, HDFreeSpaceKB, GuestOS, Datacenter, Folder, IP, SnapshotName, SnapshotDate
        $Summary.Name = $_.Summary.Config.Name
        $summary.HostName = $_.Summary.Guest.HostName
        $Summary.State = $_.Summary.Runtime.PowerState
        $Summary.NumCPU = $_.Summary.Config.NumCPU
        $Summary.MemoryMB = $_.Summary.Config.MemorySizeMB
        $Summary.HDSizeKB = $_.Guest.Disk.Capacity/1KB
        $Summary.HDFreeSpaceKB = $_.Guest.Disk.FreeSpace/1KB
        $Summary.GuestOS = $_.Summary.Config.GuestFullName
        $Summary.Folder = $_.Folder.Name
        $Summary.IP = $_.Summary.Guest.IPAddress
        $Summary.SnapshotName = &{$script:snaps = Get-Snapshot -VM $Summary.Name; $script:snaps.Name -join ','}
        $Summary.snapshotdate = $script:snaps.Created -join ','
        $Summary
    
    }| Export-Csv C:\setup\Tezt.csv -NoTypeInformation -Encoding UTF8 -Delimiter "|"
    

    您将得到如下输出:

    "Name"|"HostName"|"State"|"NumCPU"|"MemoryMB"|"HDSizeKB"|"HDFreeSpaceKB"|"GuestOS"|"Datacenter"|"Folder"|"IP"|"SnapshotName"|"SnapshotDate"
    "VMName"||"poweredOff"|"2"|"4096"|"0"|"0"|"Microsoft Windows Server 2008 (64-bit)"||||"Test Snap 00,Test snap 01"|"12/07/18 11:15:42 AM,12/07/18 11:16:04 AM"
    

    希望有帮助!

    【讨论】:

    • 如何在这个脚本中集成所有虚拟机名称?我已经有一个包含所有名称的 csv。
    • 我在 Get-VM 命令上使用星号运行我的。 (Get-VM * | Get-View)
    • 我试过这个 $report = @() foreach($vm in Get-View -ViewType Virtualmachine) { $vms.SnapshotName = &{$script:snaps = Get-Snapshot -VM $vm.Name; $script:snaps.Name -join ','} $vms.snapshotdate = $script:snaps.Created -join ',' $report += $vms } 并导出到 CSV:$report1 = $report.GetEnumerator() | sort -Property VMName $report1 | ConvertTo-Csv -NoTypeInformation | Out-File $path -Encoding:UTF8 -Force
    • 我测试了它,“SnapshotName”和“Snapshotdate”列是空的
    • 我想你有一个拼写错误,是 $VMS 还是 $VM? foreach($vm in Get-View -ViewType Virtualmachine) { $vm.Name $vm.SnapshotName = &{$script:snaps = Get-Snapshot -VM $vm.Name; $script:snaps.Name -join ','} $vm.snapshotdate = $script:snaps.Created -join ','}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多