在 powershell 中整合 30 天前的 VMWare 快照
Consolidate VMWare snapshots older then 30 days in powershell
我正在尝试使用以下脚本完成上述操作:
Connect-VIServer -Server ServerName01
$VMName = Get-VM | Get-Snapshot |
Where {$_.Created -lt (Get-Date).AddDays(-30)} | select VM |
ForEach-Object {
$VMName.ExtensionData.ConsolidateVMDisks()
}
我是 PowerCLI 的新手,这是我迄今为止想出的最好的。
我不想 运行 这个命令,直到我可以看到变量 $VMName 的内容,所以我 运行 下面的命令。
Get-VM | Get-Snapshot | Where {$_.Created -lt (Get-Date).AddDays(-30)} | select VM
哪个return符合上述条件的VMName列表(人工检查确认)
初始代码不起作用,它根本没有将 $VMName 变量中的任何内容传递给 ExtensionData.ConsolidateVMDisks()
Get-VM | Get-Snapshot | Where-Object {$_.Created -lt (Get-Date).AddDays(-30)} | Remove-Snapshot
有效,但我希望在确认中看到虚拟机的名称和快照 window。
谢谢。
以下将允许您为每个 VM 执行 ConsolidateVMDisks()
方法。
$VMName = Get-VM | Get-Snapshot |
Where {$_.Created -lt (Get-Date).AddDays(-30)} | select VM
$VMName | Foreach-Object {
$_.VM.Name
$_.VM.ExtensionData.ConsolidateVMDisks()
}
以下将使用Remove-Snapshot
命令满足您的要求:
$Snapshots = Get-VM | Get-Snapshot | Where-Object {$_.Created -lt (Get-Date).AddDays(-30)}
$Snapshots | Foreach-Object {
"VM Name: {0}" -f $_.VM.Name
"Snapshot Name: {0}" -f $_.Name
$_ | Remove-Snapshot
}
在您最初的尝试中,$VMName
包含一组 VM 对象。当您将数组通过管道传输到 Foreach-Object
脚本块时,当前对象变为 $_
或 $PSItem
。当前对象是您必须访问 属性 和相应方法的地方。我添加了 $_.Name
代码以在合并发生之前将当前 VM 名称显示到控制台。如果该方法已经提供了您需要的输出,请随意删除它。
我正在尝试使用以下脚本完成上述操作:
Connect-VIServer -Server ServerName01
$VMName = Get-VM | Get-Snapshot |
Where {$_.Created -lt (Get-Date).AddDays(-30)} | select VM |
ForEach-Object {
$VMName.ExtensionData.ConsolidateVMDisks()
}
我是 PowerCLI 的新手,这是我迄今为止想出的最好的。
我不想 运行 这个命令,直到我可以看到变量 $VMName 的内容,所以我 运行 下面的命令。
Get-VM | Get-Snapshot | Where {$_.Created -lt (Get-Date).AddDays(-30)} | select VM
哪个return符合上述条件的VMName列表(人工检查确认)
初始代码不起作用,它根本没有将 $VMName 变量中的任何内容传递给 ExtensionData.ConsolidateVMDisks()
Get-VM | Get-Snapshot | Where-Object {$_.Created -lt (Get-Date).AddDays(-30)} | Remove-Snapshot
有效,但我希望在确认中看到虚拟机的名称和快照 window。
谢谢。
以下将允许您为每个 VM 执行 ConsolidateVMDisks()
方法。
$VMName = Get-VM | Get-Snapshot |
Where {$_.Created -lt (Get-Date).AddDays(-30)} | select VM
$VMName | Foreach-Object {
$_.VM.Name
$_.VM.ExtensionData.ConsolidateVMDisks()
}
以下将使用Remove-Snapshot
命令满足您的要求:
$Snapshots = Get-VM | Get-Snapshot | Where-Object {$_.Created -lt (Get-Date).AddDays(-30)}
$Snapshots | Foreach-Object {
"VM Name: {0}" -f $_.VM.Name
"Snapshot Name: {0}" -f $_.Name
$_ | Remove-Snapshot
}
在您最初的尝试中,$VMName
包含一组 VM 对象。当您将数组通过管道传输到 Foreach-Object
脚本块时,当前对象变为 $_
或 $PSItem
。当前对象是您必须访问 属性 和相应方法的地方。我添加了 $_.Name
代码以在合并发生之前将当前 VM 名称显示到控制台。如果该方法已经提供了您需要的输出,请随意删除它。