You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Get-AzureRmDisk获取OS磁盘TimeCreated去重后仍有重复值求助

解决Azure PowerShell提取OS磁盘创建日期重复的问题

嘿,我一眼就看到你代码里的问题啦!你在筛选OS磁盘的时候犯了个小错误,导致后续的日期提取和去重都出了问题。

问题根源

你写的这行代码:

$osdisk = $disks.Name -match '-osdisk'

它返回的只是匹配-osdisk的磁盘名称字符串数组,不是完整的磁盘对象集合。所以当你调用$osdisk.TimeCreated的时候,PowerShell其实没办法正确获取到每个磁盘的创建时间(因为字符串根本没有TimeCreated属性),这就导致你拿到的日期要么是错误的,要么是出现莫名其妙的重复。

正确的解决步骤

我们需要先筛选出完整的OS磁盘对象,再提取创建时间并去重:

  1. 筛选OS磁盘对象
$disks = Get-AzureRmDisk -ResourceGroupName "testGroup"
# 用Where-Object过滤出名称包含-osdisk的磁盘对象
$osdisks = $disks | Where-Object { $_.Name -match '-osdisk' }
  1. 提取并去重创建日期
$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:42:02