powercli - 从脚本中排除虚拟机列表删除 vmware 中的快照
问题描述
我有一个powercli
计划删除VMs
早于 X 天的脚本,最近我们得到了一个列表,VMs
其中应该从快照删除中排除,因为这些是关键快照。如何VM
在脚本中引入参数 exclude 以将VMS
Vcenter 中的快照与我提供的列表进行比较,并仅列出和删除VMS
符合不超过 X 天且不属于排除列表的条件的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 天以上的快照的“vms”列表不应该被删除怎么办。我想排除那些“虚拟机”,但我不知道该怎么做。
所以我尝试使用@IT 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 名称作为列表,在这种情况下排除它们
$list = 获取虚拟机 | 其中{“名称”-ne“mypreciousvm”}
您将需要使用 -notmatch 或 -notcontains 我不记得您需要哪个。然后通过下面的排除列表。
$old_snapshots = 获取虚拟机名称 $list | 获取快照|?{ ([DateTime]::Now - $_.Created).TotalDays -gt 7 } | 删除快照:$old_snapshots | 删除快照 -RunAsync -Confirm:$false
如果虚拟机来来去去很多,那么请尝试一次性完成,否则在重新获取虚拟机名称时可能会出现错误
$old_snapshots = 获取虚拟机 | 其中 {$ .name -notcontains $list}| 获取快照|?{ ([DateTime]::Now - $ .Created).TotalDays -gt 7 } | 删除快照:$old_snapshots | 删除快照 -RunAsync -Confirm:$false
推荐阅读
- python - 自动安装 GFortran 和 Python3
- php - 如何在 MYSQL 中创建子查询
- javascript - 如何在 React 中导入 JS 脚本,类似于它在 HTML 中的完成方式
- django - 在 Django 返回对象中获取最新 ID 是不可迭代的
- powershell - 如何在 Powershell 中加速 Get-ChildItem
- ios - 在运行时在 tableview 单元格中添加子视图并展开 tableview 单元格的最佳方法
- json - 无法将 json 映射到 golang 结构
- javascript - 我想通过 url 在 php 登陆页面中嵌入视频
- java - paintComponent() 和 paint() - 使用装饰器模式绘制 JButton
- javascript - 如何知道点击事件中点击了什么?