删除早于X天的Azure快照

删除早于X天的Azure快照,azure,powershell,azure-storage,Azure,Powershell,Azure Storage,我已经接近我需要的了,但是我缺少了一些东西,因为快照没有被删除。我想我的datetime字符串不是完全正确的,所以我来这里寻求一些帮助。这是我当前的PS代码 rg = 'snapshots' $snapshotnames = (Get-AzureRmSnapshot -ResourceGroupName $rg).name foreach($snapname in $snapshotnames) { Get-AzureRmSnapshot -ResourceGroupName $rg

我已经接近我需要的了,但是我缺少了一些东西,因为快照没有被删除。我想我的datetime字符串不是完全正确的,所以我来这里寻求一些帮助。这是我当前的PS代码

rg = 'snapshots'
$snapshotnames = (Get-AzureRmSnapshot -ResourceGroupName $rg).name

foreach($snapname in $snapshotnames)
{
    Get-AzureRmSnapshot -ResourceGroupName $rg  -SnapshotName $snapname |
        ?{($_.TimeCreated).ToString('yyyy-MM-dd') -lt ([datetime]::Today.AddDays(-1).tostring('yyyy-MM-dd'))} |
        remove-azurermsnapshot -force
} 
快照名称的格式如下:Testvm--2018-09-20

$timestamp = Get-Date -f ---yyyy-MM-dd
$snapshotName = $vmInfo.Name + $timestamp
所以我认为我的问题是这一部分

?{($_.TimeCreated).ToString('yyyy-MM-dd') -lt ([datetime]::Today.AddDays(-1).tostring('yyyy-MM-dd'))} | remove-azurermsnapshot -force

尝试下面的命令,示例将删除10天以前的快照

rg = 'snapshots'
$snapshotnames = (Get-AzureRmSnapshot -ResourceGroupName $rg).name

foreach($snapname in $snapshotnames)
{
    Get-AzureRmSnapshot -ResourceGroupName $rg -SnapshotName $snapname | ?{($_.TimeCreated) -lt ([datetime]::UtcNow.AddDays(-10))} | remove-azurermsnapshot -force
}
我的指定测试命令

Get-AzureRmSnapshot -ResourceGroupName joywebapp -SnapshotName joytestss1 | ?{($_.TimeCreated) -lt ([datetime]::UtcNow.AddDays(-10))} | remove-azurermsnapshot -force

我的快照

Get-AzureRmSnapshot -ResourceGroupName joywebapp -SnapshotName joytestss1 | ?{($_.TimeCreated) -lt ([datetime]::UtcNow.AddDays(-10))} | remove-azurermsnapshot -force

还要检查门户中的日志

Get-AzureRmSnapshot -ResourceGroupName joywebapp -SnapshotName joytestss1 | ?{($_.TimeCreated) -lt ([datetime]::UtcNow.AddDays(-10))} | remove-azurermsnapshot -force


这里有一个类似的问题,请参考此问题。

您试图使用
-lt
比较两个字符串值,但这不会以您想要的方式工作。尝试删除
.ToString()
,您可能会得到更好的结果,而不是比较本机
日期时间
对象:)如下:
?{($.TimeCreated)-lt([datetime]::Today.AddDays(-1))}删除azurermsnapshot-force
我运行了此操作,但没有删除任何内容。在今天(2018年9月20日)创建的上述资源组中有一个vm,
$rg='snapshots'$snapshotnames=(Get-AzureRmSnapshot-ResourceGroupName$rg).name foreach($snapshotnames中的snapname){Get-AzureRmSnapshot-ResourceGroupName$rg-SnapshotName$SnapshotName |?{($.TimeCreated)-lt([datetime]::Todays.AddDays(-1))]| remove azurermsnapshot-force | remove azurermsnapshot-force}
谢谢这对我很有用。我去掉了.tostring,并将时间部分格式化<代码>获取AzureRmSnapshot-ResourceGroupName$rg-SnapshotName$snapname |?{($..TimeCreated)-lt([datetime]::Now.AddDays(0))}| | |删除AzureRmSnapshot-force这是我的代码部分,非常感谢@James C的帮助。