本文共 999 字,大约阅读时间需要 3 分钟。
昨天在powershell.org的论坛看见有人问如何删除ShadowCopy。这个网友的要求是,凡事老于今天的快照,如果一天有很多份备份,只保留最后的一份。
豆子写了个脚本实现这个功能。自己觉得有点啰嗦,但是因为没有找到对应的comlet删除指定ID的快照,只有通过wmi找到所有的快照过滤之后在用其对象本身的函数删除自己。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $delsnap =@() Get-WmiObject -ComputerName sydittest -Class win32_shadowcopy | select deviceobject,ID,@{n= 'datetime' ;e={ [management.managementDateTimeConverter] ::ToDateTime( $_ .installdate)}},@{n= 'dayofyear' ;e={ [management.managementDateTimeConverter] ::ToDateTime( $_ .installdate).dayofyear}} | group dayofyear | Where-Object { $_ .dayofyear -lt ( get-date ).DayOfYear} | foreach { if ( $_ .count -gt 1){ $max = $_ .count-1 for ( $i =0; $i -lt $max ; $i ++ ){ $temp = [pscustomobject] @{id= $_ .group[ $i ].id} $delsnap += $temp } } } $delsnap | foreach { $id = $_ .id.ToString() Get-WmiObject -ComputerName sydittest -Class win32_shadowcopy | foreach { if ( $_ .id -eq $id ){ $_ .delete() } } } |