使用PowerCLI为多个服务器添加和删除快照

时间:2014-08-08 16:35:54

标签: virtual-machine snapshot powercli

我正在尝试使用PowerCLI从多台服务器获取快照。

Connect-VIServer -server 192.168.0.1 -user acconut -password xxx

$vmlist = Get-Content C:\Users\Desktop\Test\Servers.txt

foreach($VM in $VMlist) {
    New-Snapshot -VM $vm -Name Temp-SnapShot -description (get-date),'Created for patching'
}

Disconnect-VIServer -Confirm:$false    

如果我删除get-date,脚本将有效。但我需要在描述中输入日期。我应该如何更改上面的脚本以在快照的描述中获得Get-Date

此外,我需要在几天后删除这些快照:

Connect-VIServer -server 192.168.0.1 -user acconut -password xxx

$vmlist = Get-Content C:\Users\Desktop\Test\Servers.txt

foreach($VM in $VMlist) {
    Remove-Snapshot -VM $vm -snapshot -confirm:$false
}

Disconnect-VIServer -Confirm:$false  

我无法使用Remove-Snapshot删除快照,因为我收到此错误:

  

删除快照:缺少参数'快照'的参数。指定类型为' VMware.VimAutomation.ViCore.Types.V1.VM.Snapshot []'的参数。然后再试一次。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

在说明部分,您可以放置​​$date = get-datedo -description $date。这应该有用。

在删除快照之前需要的快照之前。我会说编辑你的删除快照行以包含这个:

Get-Snapshot -VM $vm | Remove-Snapshot -confirm:$false

您甚至可能想要添加-RemoveChildren:$ true(这将删除"所有"快照)

答案 1 :(得分:0)

这应该有助于你正在寻找什么。它找到了快照并删除了超过10天的任何内容。

$snaps = Get-VM | Get-snapshot | Select vm,name,created

if ($snaps.created -le (get-date).adddays(-10))
{
  $remsnaps = $snaps | Where {$_.created -le (get-date).adddays(-10)}
  $remsnaps | Out-File "C:\Scripts\RemoveSnaps\logs\remsnapsVC.txt"
  $remobject = Get-Content "C:\Scripts\RemoveSnaps\logs\remsnapsVC.txt"

  $rmsnap = Get-Snapshot $remsnaps.vm
  Remove-Snapshot -Snapshot $rmsnap -RemoveChildren -Confirm:$false #-WhatIf


 $MessageSubject = "The following snaps were removed from NTVCenter01!"
 $MessageBody = $remobject | fl | out-string

 SendEmail

}