创建具有快照状态的额外列的VM清单?

时间:2017-03-24 19:56:31

标签: powershell powercli

我仍在学习powershell和powercli,但想知道是否有人可以帮助我。

我正在尝试显示(最终导出到csv) ALL VM的清单,其中包含一个值为"是"的快照列。如果存在快照(非空)。

我创建了额外的列并输出到csv:

Get-VM | select Name, PowerState, Snapshot | Export-Csv -Path "c:\VMs\vminventory.csv" -NoTypeInformation

如何获得"是"如果Snapshot不为null:

$VMs = Get-VM
ForEach ($VM in $VMs) {
$VMSnapshot = Get-VM -name $VM | get-Snapshot
If ($VMSnapshot) {Write-Host "yes" }
}

任何人都有关于如何将这些概念组合起来输出这样的东西的想法吗?

VM Inventory Results

2 个答案:

答案 0 :(得分:2)

可能这样的事情会起作用(我没有PowerCli进行测试)。这里发生的是您向对象添加新属性并将对象导出到csv。你可以在飞行中构建这个属性。

我还删除了对get-vm的额外调用,应该可以节省很多时间。

$VMs = Get-VM
ForEach ($VM in $VMs) {
    $VMSnapshot = $vm | Get-Snapshot
    If ($VMSnapshot) {
        $row = $VM | select Name,Powerstate
        $row | Add-Member-MemberType NoteProperty -Name "Snapshot" -Value "Yes"
        $row | Export-CSV -Path "c:\VMs\vminventory.csv" -Append -NoTypeInformation
    }
}

如果您需要导出所有虚拟机(不仅是那些带有快照的虚拟机),请执行以下操作:

$VMs = Get-VM
ForEach ($VM in $VMs) {
    $VMSnapshot = $vm | Get-Snapshot
    $row = $VM | select Name,Powerstate
    If ($VMSnapshot) {
        $row | Add-Member-MemberType NoteProperty -Name "Snapshot" -Value "Yes"
    }
    else {
        $row | Add-Member-MemberType NoteProperty -Name "Snapshot" -Value "No"
    }
    $row | Export-CSV -Path "c:\VMs\vminventory.csv" -Append -NoTypeInformation
}

答案 1 :(得分:-1)

谢谢!!!!!!!!最终代码在这里:

$VMs = Get-VM
ForEach ($VM in $VMs) {
    $VMSnapshot = $vm | Get-Snapshot
    $row = $VM | select Name,Powerstate
    If ($VMSnapshot) {
        $row | Add-Member -MemberType NoteProperty -Name "Snapshot" -Value "Yes"
    }
    $row | Export-CSV -Path "c:\VMs\vminventory.csv" -Append -NoTypeInformation -Force
}