none
наименьшее значение RRS feed

  • Вопрос

  • есть массив $T, получаемый с помощью Get-Event "| Foreach {$_.TimeCreated.ToString("dd-MM-yyyy HH:mm:ss")}":

    13-08-2018 16:59:23
    13-08-2018 16:59:23
    13-08-2018 13:14:18
    13-08-2018 13:14:18
    13-08-2018 11:31:56
    13-08-2018 11:31:56
    13-08-2018 11:15:18
    13-08-2018 11:15:18
    13-08-2018 09:38:54
    13-08-2018 09:38:54

    Выбрать из него минимальное или максимальное значение можно так:

    ($T | measure -Minimum).Minimum
    13-08-2018 09:38:54

    А как быть если массив такой и надо выбрать два минимальных значения (по одному на кадый день):

    14-09-2018 13:54:48
    14-09-2018 13:54:48
    14-09-2018 12:04:14
    14-09-2018 12:04:14
    14-09-2018 10:53:00
    14-09-2018 10:53:00
    14-09-2018 09:46:57
    14-09-2018 09:46:57
    13-09-2018 18:00:16
    13-09-2018 18:00:16
    13-09-2018 15:25:21
    13-09-2018 15:25:21
    13-09-2018 14:40:45
    13-09-2018 14:40:45
    13-09-2018 13:32:21
    13-09-2018 13:32:21
    13-09-2018 12:42:29
    13-09-2018 12:42:29
    13-09-2018 12:30:46
    13-09-2018 12:30:46
    13-09-2018 10:50:02
    13-09-2018 10:50:02
    13-09-2018 10:18:47
    13-09-2018 10:18:47

    Спасибо!

    17 сентября 2018 г. 7:47
    Модератор

Ответы

  • Get-WinEvent -LogName Application | Group-Object {$_.TimeCreated.Date} | Foreach {
    	$min = ($_.Group | Foreach {$_.TimeCreated} | Measure-Object -Min).Minimum
    	$max = ($_.Group | Foreach {$_.TimeCreated} | Measure-Object -Max).Maximum
    	[PSCustomObject]@{
    		Date = $min.Date.ToString("dd-MM-yyyy")
    		Min = $min.ToString("dd-MM-yyyy HH:mm:ss")	
    		Max = $max.ToString("dd-MM-yyyy HH:mm:ss")
    	}
    }

    Если требуется действительно две минимальные записи на день, то:

    $min2,$min1 = $_.Group | Sort {$_.TimeCreated} -Desc | Foreach {$_.TimeCreated}| Select -Last 2
    	[PSCustomObject]@{
    		Date = $min.Date.ToString("dd-MM-yyyy")
    		Min1 = $min1.ToString("dd-MM-yyyy HH:mm:ss")
    		Min2 = $min2.ToString("dd-MM-yyyy HH:mm:ss")
    	}

    Минимальное на каждый день:

    Get-WinEvent -LogName Application | Group-Object {$_.TimeCreated.Date} | Foreach {
    	($_.Group | Foreach {$_.TimeCreated} | Measure-Object -Min).Minimum.ToString("dd-MM-yyyy HH:mm:ss")
    }




    • Изменено KazunEditor 17 сентября 2018 г. 9:23
    • Помечено в качестве ответа AnahaymModerator 17 сентября 2018 г. 10:24
    17 сентября 2018 г. 8:46
    Отвечающий

Все ответы

  • ну если не думать то вроде както так

    PS C:\Windows\system32> $x="hgfhgf";$t|sort|%{if (($_).substring(0,10) -ne $x) {echo $_; $x=($_).substring(0,10)}}
    13-09-2018 10:18:47
    14-09-2018 09:46:57
    



    • Изменено Svolotch 17 сентября 2018 г. 8:42
    17 сентября 2018 г. 8:40
  • Get-WinEvent -LogName Application | Group-Object {$_.TimeCreated.Date} | Foreach {
    	$min = ($_.Group | Foreach {$_.TimeCreated} | Measure-Object -Min).Minimum
    	$max = ($_.Group | Foreach {$_.TimeCreated} | Measure-Object -Max).Maximum
    	[PSCustomObject]@{
    		Date = $min.Date.ToString("dd-MM-yyyy")
    		Min = $min.ToString("dd-MM-yyyy HH:mm:ss")	
    		Max = $max.ToString("dd-MM-yyyy HH:mm:ss")
    	}
    }

    Если требуется действительно две минимальные записи на день, то:

    $min2,$min1 = $_.Group | Sort {$_.TimeCreated} -Desc | Foreach {$_.TimeCreated}| Select -Last 2
    	[PSCustomObject]@{
    		Date = $min.Date.ToString("dd-MM-yyyy")
    		Min1 = $min1.ToString("dd-MM-yyyy HH:mm:ss")
    		Min2 = $min2.ToString("dd-MM-yyyy HH:mm:ss")
    	}

    Минимальное на каждый день:

    Get-WinEvent -LogName Application | Group-Object {$_.TimeCreated.Date} | Foreach {
    	($_.Group | Foreach {$_.TimeCreated} | Measure-Object -Min).Minimum.ToString("dd-MM-yyyy HH:mm:ss")
    }




    • Изменено KazunEditor 17 сентября 2018 г. 9:23
    • Помечено в качестве ответа AnahaymModerator 17 сентября 2018 г. 10:24
    17 сентября 2018 г. 8:46
    Отвечающий
  • ну если не думать то вроде както так

    PS C:\Windows\system32> $x="hgfhgf";$t|sort|%{if (($_).substring(0,10) -ne $x) {echo $_; $x=($_).substring(0,10)}}
    13-09-2018 10:18:47
    14-09-2018 09:46:57
    

    Ошибка:

    Method invocation failed because [System.Diagnostics.Eventing.Reader.EventLogRecord] does not contain a method named 'substring'.
    At line:1 char:27
    + $x="hgfhgf";$t|sort|%{if (($_).substring(0,10) -ne $x) {echo $_; $x=( ...
    +                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound
    

    Делаю на WS 2016.

    Если требуется действительно две минимальные записи на день, то:
    нет, нет. именно одно значение, но каждого дня.
    17 сентября 2018 г. 10:24
    Модератор
  • >>Ошибка:

    я просто в массив даты как стринги загнал, но а вашем случае:

    $x=0;Get-WinEvent -LogName Application| sort -Property TimeCreated|%{if ($_.timecreated.day -ne
    $x){$x=$_.timecreated.day;$_}}| sort -Property TimeCreated -des

    хотя способ казуна более расово верный, но этот более тупорылый и быстрый


    17 сентября 2018 г. 11:14