使用Get-AzureRmDisk获取OS磁盘TimeCreated去重后仍有重复值求助
解决Azure PowerShell提取OS磁盘创建日期重复的问题
嘿,我一眼就看到你代码里的问题啦!你在筛选OS磁盘的时候犯了个小错误,导致后续的日期提取和去重都出了问题。
问题根源
你写的这行代码:
$osdisk = $disks.Name -match '-osdisk'
它返回的只是匹配-osdisk的磁盘名称字符串数组,不是完整的磁盘对象集合。所以当你调用$osdisk.TimeCreated的时候,PowerShell其实没办法正确获取到每个磁盘的创建时间(因为字符串根本没有TimeCreated属性),这就导致你拿到的日期要么是错误的,要么是出现莫名其妙的重复。
正确的解决步骤
我们需要先筛选出完整的OS磁盘对象,再提取创建时间并去重:
- 筛选OS磁盘对象
$disks = Get-AzureRmDisk -ResourceGroupName "testGroup" # 用Where-Object过滤出名称包含-osdisk的磁盘对象 $osdisks = $disks | Where-Object { $_.Name -match '-osdisk' }
- 提取并去重创建日期
$uniqueDates = $osdisks.TimeCreated | Select-Object -Unique
额外处理:日期精度导致的“假重复”
如果执行上面的代码后还是有重复,大概率是因为TimeCreated属性包含毫秒级精度——看起来一样的日期,实际毫秒数不同,所以Select-Object -Unique会把它们当成不同的值。这时候可以先把日期格式化到秒级别再去重:
# 格式化到秒,再去重(返回字符串格式日期) $uniqueDates = $osdisks.TimeCreated | ForEach-Object { Get-Date $_ -Format "yyyy-MM-dd HH:mm:ss" } | Select-Object -Unique # 如果需要保留DateTime对象而不是字符串,可以这样处理 $uniqueDates = $osdisks.TimeCreated | ForEach-Object { # 给每个日期对象添加一个忽略毫秒的属性 $_ | Add-Member -NotePropertyName TrimmedTime -NotePropertyValue (Get-Date $_ -Format "yyyy-MM-dd HH:mm:ss") -PassThru } | Group-Object -Property TrimmedTime | ForEach-Object { # 每个分组取第一个原始DateTime对象 $_.Group[0].TimeCreated }
这样就能得到真正唯一的OS磁盘创建日期啦!
内容的提问来源于stack exchange,提问作者raptor85
相关产品推荐
相关产品推荐

