【发布时间】:2019-06-10 08:31:30
【问题描述】:
我有一个 powercli 脚本,它计划删除早于 X 天的 VMs,最近我们得到了一个 VMs 列表,它们应该从快照删除中排除,因为这些是关键快照。
如何在我的脚本中引入参数 exclude VM 以将 VMS 与 Vcenter 中的快照与我提供的列表进行比较,并仅列出和删除符合不超过 X 天且不属于部分条件的 VMS排除VM 列表。
我比较新,使用下面的代码来获取超过 10 天的快照并删除它们。
# vCenter Server configuration
$vcenter = "Vcenter Name"
$vcenteruser = "Domain\Userid"
$vcenterpw = "Password"
#Connect to the vCenter server defined above. Ignore certificate errors
Connect to vcenter Server connect-viserver $vcenter -User $vcenteruser -Password $vcenterpw"
Add-PSSnapin VMware.VimAutomation.Core -ErrorAction 'SilentlyContinue'
Clear-Host
$old_snapshots = Get-VM | Get-Snapshot |? { ([DateTime]::Now - $_.Created).TotalDays -gt 7 } | Remove-Snapshot: $old_snapshots | Remove-Snapshot -RunAsync -Confirm:$false
我需要弄清楚如果我有一个包含 10 天以上快照且不应删除的“虚拟机”列表,该怎么办。我想排除那些“虚拟机”,但我不知道该怎么做。
所以我尝试使用 @I.T Delinquent 的逻辑。我在“$VmToIgnore”中输入了一个值,并将其与“Get-Vm”中收到的 VM 列表进行比较。如果为真则什么都不做,如果为假,则获取该 VM 的快照和其他属性并将其导出为 CSV。
$vmsToIgnore ="Vm1"
$e = Get-VM
Foreach-Object {
if ($vmsToIgnore -Contains $_.Name){
#Do nothing as VM name is in the vmsToIgnore list
}else{
$f = $e |get-Snapshot| Select-object
vm,VMId,name,Description,SizeGB,created
$f| Export-Csv -Path "\\%path%\snapshot.csv"
}
}
这仍然返回所有“VM”快照的列表,包括一个“$VMToIgnore”。
我一定是在这里犯了一些错误,因为它不应该在 Excel 中打印“$VmToIgnore”。
【问题讨论】:
-
您能提供一些您已经尝试过的东西以及您遇到的具体问题吗?
-
我已经用我正在使用的代码更新了我的问题。我试图找到一种方法从这个自动删除“VM”快照脚本中排除几个“VM”快照。但我不知道该怎么做。
-
您收到的列表格式是什么? TXT? CSV?还有什么?列表会经常变化还是相对静止?
-
@TheSinghSyndrome 我已经更新了我的答案。请查看:)
-
非常感谢@I.T Delinquent。这是我需要的工作。 :)
标签: powercli