使用 PowerShell 循环获取状态结果

使用 PowerShell 循环获取状态结果

我在 PowerShell 中编写了一个脚本,用于创建 aws ebs 快照,它运行良好,没有任何问题,只是我无法定期获取进度状态以继续执行脚本中的下一步。除非我没有获得快照已 100% 完成的更新,否则我无法继续执行脚本中的下一步,即应用程序升级。任何帮助都非常感谢。

    Import-Module -name AWSPowerShell
    $CostIdValue = Read-Host "Please provide ID , e.g.:- 111"
    $CostId = Get-EC2Volume -profilename xyz -region us-east-2 | ? { $_.Tags.Count -gt 0 -and $_.Tags.Key -eq "CostId" -and $_.Tags.Value -eq $CostIdValue} | Select-Object -ExpandProperty VolumeId 
    $snapshot = New-EC2Snapshot -profilename xyz -region us-east-2 -VolumeId $CostId
    #$snapshotId = Get-EC2Volume -profilename xyz -region us-east-2 | ? { $_.Tags.Count -gt 0 -and $_.Tags.Key -eq "CostId" -and $_.Tags.Value -eq $CostIdValue} | Select-Object -ExpandProperty SnapshotId
    $a = $snapshot.SnapshotId
    #Write-Output $a
    New-EC2Tag -profilename xyz -region us-east-2 -Resource $a -Tag @{ Key="CostId"; Value = $CostIdValue }
    
    $i = Get-EC2Snapshot -profilename xyz -region us-east-2 | ? { $_.Tags.Count -gt 0 -and $_.Tags.Key -eq "CostId" -and $_.Tags.Value -eq "$CostIdValue"} | Select-Object -ExpandProperty State

for ($i = 1; $i -le 100; $i++ )
{
Write-Progress -Activity "Search in Progress" -Status "$i% Complete:" -PercentComplete $i;
}

答案1

所以我使用了 while 并连续检查了状态。现在脚本正在根据状态检查快照,并且它按预期完美运行。感谢大家的参与。

while ((Get-EC2Snapshot -profilename xyz -region $region | ? { $_.Tags.Count -gt 0 -and $_.Tags.Key -eq "CostId" -and $_.Tags.Value -eq "$CostIdValue"}).Status -ne "completed")
 {
       "Snapshot for db is $CostIdValue pending ..."
        Start-Sleep -Seconds 5
    }
    
      "Snapshot for db is $CostIdValue completed ..."

相关内容