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

如何用PowerShell获取各主机名对应最新时间戳的行?

需求说明

输入数据

HostnamesStatusTime
Host1Retired1/31/2023 9:27:06 PM
Host2Active2/1/2023 11:45:48 AM
Host1Active2/10/2023 4:59:27 AM
Host1Active2/13/2023 1:24:50 PM
Host2Retired2/10/2023 1:17:29 PM

期望输出

HostnamesStatusTime
Host1Active2/13/2023 1:24:50 PM
Host2Retired2/10/2023 1:17:29 PM

PowerShell实现方案

通过分组-排序-取首条的逻辑即可提取每个主机的最新记录,核心是将时间字段转换为可排序的DateTime类型,确保排序准确性。

代码示例

# 模拟输入数据(如果是从CSV文件读取,替换为 Import-Csv -Path "你的文件路径.csv")
$inputData = @(
    [PSCustomObject]@{ Hostnames = 'Host1'; Status = 'Retired'; Time = '1/31/2023 9:27:06 PM' },
    [PSCustomObject]@{ Hostnames = 'Host2'; Status = 'Active'; Time = '2/1/2023 11:45:48 AM' },
    [PSCustomObject]@{ Hostnames = 'Host1'; Status = 'Active'; Time = '2/10/2023 4:59:27 AM' },
    [PSCustomObject]@{ Hostnames = 'Host1'; Status = 'Active'; Time = '2/13/2023 1:24:50 PM' },
    [PSCustomObject]@{ Hostnames = 'Host2'; Status = 'Retired'; Time = '2/10/2023 1:17:29 PM' }
)

# 核心处理流程
$result = $inputData | 
    # 按主机名分组
    Group-Object -Property Hostnames | 
    ForEach-Object {
        # 每组内按时间降序排序,取第一条(最新记录)
        $_.Group | Sort-Object { [DateTime]$_.Time } -Descending | Select-Object -First 1
    }

# 格式化输出结果
$result | Format-Table -AutoSize

逻辑说明

  1. 分组:用Group-Object将数据按Hostnames归类,每个分组对应单台主机的所有状态记录。
  2. 排序:将Time字段强制转换为DateTime类型,确保时间排序的准确性,再按降序排列(最新时间在前)。
  3. 取首条:用Select-Object -First 1提取每组的第一条记录,即该主机的最新状态记录。

内容的提问来源于stack exchange,提问作者Mudit Bahedia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:01:51