首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在powershell中查找特定字段之间的日期差异

在powershell中查找特定字段之间的日期差异
EN

Stack Overflow用户
提问于 2020-04-06 17:14:17
回答 2查看 43关注 0票数 0

我有以下PS自定义对象

代码语言:javascript
复制
Time                  DateFormat Event Type
----                  ---------- ----------
3/31/2020 11:59:35 PM 31/03/2020 AGENT_RECONNECTED
3/31/2020 4:01:56 PM  31/03/2020 AGENT_DISCONNECTED
3/31/2020 4:14:19 PM  31/03/2020 AGENT_CONNECTED
3/31/2020 4:24:12 PM  31/03/2020 AGENT_CONNECTED
3/31/2020 4:30:31 PM  31/03/2020 AGENT_DISCONNECTED
3/31/2020 4:36:08 PM  31/03/2020 AGENT_RECONNECTED
3/31/2020 5:12:49 PM  31/03/2020 AGENT_DISCONNECTED
3/31/2020 6:25:39 PM  31/03/2020 AGENT_RECONNECTED
3/31/2020 7:09:08 PM  31/03/2020 AGENT_DISCONNECTED
3/31/2020 7:38:53 PM  31/03/2020 AGENT_RECONNECTED
3/31/2020 7:44:44 PM  31/03/2020 AGENT_CONNECTED
3/31/2020 8:23:48 PM  31/03/2020 AGENT_DISCONNECTED
3/31/2020 9:33:36 PM  31/03/2020 AGENT_RECONNECTED
3/31/2020 9:35:58 PM  31/03/2020 AGENT_DISCONNECTED
3/31/2020 10:46:54 PM 31/03/2020 AGENT_RECONNECTED
3/31/2020 10:50:54 PM 31/03/2020 AGENT_DISCONNECTED
3/31/2020 10:53:10 PM 31/03/2020 AGENT_RECONNECTED
3/31/2020 11:05:56 PM 31/03/2020 AGENT_DISCONNECTED
3/31/2020 11:13:47 PM 31/03/2020 AGENT_RECONNECTED
3/31/2020 11:32:41 PM 31/03/2020 AGENT_DISCONNECTED
3/31/2020 11:34:27 PM 31/03/2020 AGENT_RECONNECTED
3/31/2020 11:35:55 PM 31/03/2020 AGENT_DISCONNECTED
3/31/2020 11:38:21 PM 31/03/2020 AGENT_RECONNECTED
3/31/2020 11:50:52 PM 31/03/2020 AGENT_DISCONNECTED
3/31/2020 1:15:02 PM  31/03/2020 AGENT_CONNECTED
3/31/2020 1:04:17 PM  31/03/2020 AGENT_DISCONNECTED

我需要帮助来完成一些复杂的事情,数组是按时间排序的,我需要一个逻辑,从数组的末尾开始,找到事件类型Agent_connected / Agent_reconnected的第一个实例,当它遇到数组中的下一个条目时,查看事件类型是否匹配agent_disconnected,如果匹配,检查下一个条目,看看事件类型是否是Agent_Reconnnected / Agent_connected -如果是,那么就找出agent_disconnected事件的时间和这个Agent_reconnected /代理连接日期之间的区别,基本上,如果在断开连接事件之后的数组中遇到连接/重新连接的事件类型,那么我们需要找到这些事件之间的时间差。

一个例子-这个数组有25个对象

$obj24 = 3/31/2020 1:15:02 PM 31/03/2020 AGENT_CONNECTED --这是第一次看到代理连接/断开,如果是,我们将看到下一个元素

$obj23 = 3/31/2020 11:50:52下午31/03/2020 AGENT_DISCONNECTED我们看到一个断开事件,这意味着我们检查下一个元素是否是一个代理连接/重新连接事件

我们看到$obj 22满足这个条件,$obj22 = 3/31/2020 11:38:21 PM 31/03/2020 AGENT_RECONNECTED

我们得到的差异是$obj23.time - $obj22.time,现在我们再次返回,并看到数组中剩余元素的相同条件--评估上述三个条件,并找出时间上的差异。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-06 18:16:08

如果$obj是包含属性的自定义对象数组,则可以执行以下操作:

代码语言:javascript
复制
$obj | Sort {[datetime]$_.Time} | Foreach-Object {
    if ($_.'Event Type' -eq 'AGENT_DISCONNECTED') {
        $disc = [datetime]$_.Time
    } 
    else {
        $con = [datetime]$_.Time
        if ($disc) {
            "Agent connected at $($_.Time) after being disconnected for $($con - $disc)"
            $disc = $null
        }
    }
}

在将Time转换为[datetime]对象时,对数组执行排序。然后执行从先前断开的时间对象中减去当前(Re)连接的时间对象。$disc = $null仅用于多个(Re)连接在一行中发生时。在这种情况下,我们只减去第一个(重新)连接实例。

票数 0
EN

Stack Overflow用户

发布于 2020-04-06 18:26:23

这并不说明第0次索引是'Connect/Reconnect‘--如果是的话,它会抛出一个异常,因为它之前没有任何东西。

代码语言:javascript
复制
    $t = (@"
    Time, DateFormat, "Event Type"
    3/31/2020 11:59:35 PM,31/03/2020, AGENT_RECONNECTED
    3/31/2020 4:01:56 PM, 31/03/2020, AGENT_DISCONNECTED
    3/31/2020 4:14:19 PM, 31/03/2020, AGENT_CONNECTED
    3/31/2020 4:24:12 PM, 31/03/2020, AGENT_CONNECTED
    3/31/2020 4:30:31 PM, 31/03/2020, AGENT_DISCONNECTED
    3/31/2020 4:36:08 PM, 31/03/2020, AGENT_RECONNECTED
    3/31/2020 5:12:49 PM, 31/03/2020, AGENT_DISCONNECTED
    3/31/2020 6:25:39 PM, 31/03/2020, AGENT_RECONNECTED
    3/31/2020 7:09:08 PM, 31/03/2020, AGENT_DISCONNECTED
    3/31/2020 7:38:53 PM, 31/03/2020, AGENT_RECONNECTED
    3/31/2020 7:44:44 PM, 31/03/2020, AGENT_CONNECTED
    3/31/2020 8:23:48 PM, 31/03/2020, AGENT_DISCONNECTED
    3/31/2020 9:33:36 PM, 31/03/2020, AGENT_RECONNECTED
    3/31/2020 9:35:58 PM, 31/03/2020, AGENT_DISCONNECTED
    3/31/2020 10:46:54 PM,31/03/2020, AGENT_RECONNECTED
    3/31/2020 10:50:54 PM,31/03/2020, AGENT_DISCONNECTED
    3/31/2020 10:53:10 PM,31/03/2020, AGENT_RECONNECTED
    3/31/2020 11:05:56 PM,31/03/2020, AGENT_DISCONNECTED
    3/31/2020 11:13:47 PM,31/03/2020, AGENT_RECONNECTED
    3/31/2020 11:32:41 PM,31/03/2020, AGENT_DISCONNECTED
    3/31/2020 11:34:27 PM,31/03/2020, AGENT_RECONNECTED
    3/31/2020 11:35:55 PM,31/03/2020, AGENT_DISCONNECTED
    3/31/2020 11:38:21 PM,31/03/2020, AGENT_RECONNECTED
    3/31/2020 11:50:52 PM,31/03/2020, AGENT_DISCONNECTED
    3/31/2020 1:15:02 PM, 31/03/2020, AGENT_CONNECTED
    3/31/2020 1:04:17 PM, 31/03/2020, AGENT_DISCONNECTED
    "@) | ConvertFrom-Csv


    $o = for ($i = $t.Count; $i -gt 0; $i--) {
    if ($t[$i].'Event Type' -match 'AGENT_CONNECTED|AGENT_RECONNECTED') {
        if ($t[$i-1].'Event Type' -match 'AGENT_DISCONNECTED') {
            if ($t[$i-2].'Event Type' -match 'AGENT_CONNECTED|AGENT_RECONNECTED') {
                [pscustomobject]@{
                    'InitiatingIdx' = $i
                    'InitiatingDtm' = (Get-Date $t[$i].Time)
                    'DisconnectIdx' = $i-1
                    'DisconnectDtm' = (Get-Date $t[$i-1].Time)
                    'ReconnectIdx' = $i-2
                    'ReconnectDtm' = (Get-Date $t[$i-2].Time)
                    'DeltaMins'    = "{0:N2}" -f ((Get-Date $t[$i-1].Time) - (Get-Date $t[$i-2].Time)).TotalMinutes
                }
            }
        }
    }
}

$o | ft

    InitiatingIdx InitiatingDtm         DisconnectIdx DisconnectDtm         ReconnectIdx ReconnectDtm          DeltaMins
    ------------- -------------         ------------- -------------         ------------ ------------          ---------
               24 3/31/2020 1:15:02 PM             23 3/31/2020 11:50:52 PM           22 3/31/2020 11:38:21 PM 12.52    
               22 3/31/2020 11:38:21 PM            21 3/31/2020 11:35:55 PM           20 3/31/2020 11:34:27 PM 1.47     
               20 3/31/2020 11:34:27 PM            19 3/31/2020 11:32:41 PM           18 3/31/2020 11:13:47 PM 18.90    
               18 3/31/2020 11:13:47 PM            17 3/31/2020 11:05:56 PM           16 3/31/2020 10:53:10 PM 12.77    
               16 3/31/2020 10:53:10 PM            15 3/31/2020 10:50:54 PM           14 3/31/2020 10:46:54 PM 4.00     
               14 3/31/2020 10:46:54 PM            13 3/31/2020 9:35:58 PM            12 3/31/2020 9:33:36 PM  2.37     
               12 3/31/2020 9:33:36 PM             11 3/31/2020 8:23:48 PM            10 3/31/2020 7:44:44 PM  39.07    
                9 3/31/2020 7:38:53 PM              8 3/31/2020 7:09:08 PM             7 3/31/2020 6:25:39 PM  43.48    
                7 3/31/2020 6:25:39 PM              6 3/31/2020 5:12:49 PM             5 3/31/2020 4:36:08 PM  36.68    
                5 3/31/2020 4:36:08 PM              4 3/31/2020 4:30:31 PM             3 3/31/2020 4:24:12 PM  6.32     
                2 3/31/2020 4:14:19 PM              1 3/31/2020 4:01:56 PM             0 3/31/2020 11:59:35 PM -477.65 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61065237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档