查询最近10分钟创建的Azure VM脚本运行结果异常求助
问题核心错误点
- 第一:时间比较逻辑写反
你定义的$time = (Get-Date).AddMinutes(-10)是10分钟前的时间点,要筛选10分钟内创建的VM,应该满足创建时间晚于这个时间点,也就是$VMCreatedDate -gt $time才是符合要求的结果,你的代码把判断条件搞反了,自然会把更早创建的VM判定为符合条件的结果。 - 第二:时区不匹配导致时间对比错误
Azure返回的磁盘TimeCreated属性是UTC标准时间,而Get-Date默认获取的是你当前运行环境的本地时间,两者时区不一致会直接导致时间对比完全错误,这就是你会筛选到1小时前创建的VM的核心原因。
修正后的代码
$VMObject = Get-AzVM -ResourceGroupName "vmtest" $minutes = 10 # 统一使用UTC时间做对比,避免时区偏差 $utcThresholdTime = (Get-Date).ToUniversalTime().AddMinutes(-$minutes) foreach ($VM in $VMObject) { $VMDiskName = $VM.StorageProfile.OsDisk.Name $VMDiskInfo = Get-AzDisk -ResourceGroupName $VM.ResourceGroupName -DiskName $VMDiskName $VMCreatedDate = $VMDiskInfo.TimeCreated if ($VMCreatedDate -ge $utcThresholdTime) { Write-Output "$($vm.name) 符合要求,创建时间:$VMCreatedDate" } else { Write-Output "$($vm.name) 超出时间范围,创建时间:$VMCreatedDate" } }
额外优化建议
- 把
$minutes和阈值时间的定义提到循环外,避免每次循环重复计算,提升脚本运行效率 - 新增等于判断
-ge,避免刚好在阈值时间点创建的VM被漏判
内容的提问来源于stack exchange,提问作者Norrin Rad
相关产品推荐
相关产品推荐

