我仍在学习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" }
}
任何人都有关于如何将这些概念组合起来输出这样的东西的想法吗?
答案 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
}