ЕСЛИ между двух раз PowerShell - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь выяснить, произошла ли проблема в течение определенного периода времени, однако по какой-либо причине ничего не работает.

Вот мой файл powershell.ps1

$AUS_start = Get-Date -Hour 22 -Minute 00 -Second 00
$AUS_end = Get-Date -Hour 06 -Minute 00 -Second 00
$AS = $AUS_start.ToString("HH:mm:ss")
$AE = $AUS_end.ToString("HH:mm:ss")

foreach ($SHtime in $Rservices.start_time) {
    $x = $SHtime.ToString("HH:mm:ss")
    $x
    if ($x -gt $AS -and $x -lt $AE) {
        Write-Host "true"
    }
    else {
        Write-Host "false"
    }
}

Вот ответ, который я получаю

22:18:01
false
19:11:00
false
05:15:00
false
05:15:00
false
02:36:43
false

Как вы можете видеть, есть определенные моменты времени, например, "22:18:01", которые определенно соответствуют критериям, превышающим UT C 22:00. : 00 и меньше 06:00:00, но все равно возвращает ложное значение.

Есть идеи?

1 Ответ

1 голос
/ 29 апреля 2020

это делает то, что я думаю, что вы хотите. [ ухмылка ]

вместо проверки на in 2200-0600 она проверяет на NOT in 0600-2200. этот тест проще, поскольку он дает непрерывный диапазон, равный всего за один день . если вам нужно разрешить 2200-2259, вы можете просто сдвинуть $EndHour на 21.

обратите внимание, что явно игнорирует дату и использует только час дня. Если вам нужно посмотреть на дату, это потребует дополнительного кода. если я понимаю ваше намерение, хотя это кажется маловероятным.

что делает код ...

  • создает набор объектов даты и времени для работы с
    , когда они готовы работать с реальными данными, просто удалите весь блок #region/#endregion и замените его на вызов вашего источника данных.
  • устанавливает часы начала / окончания
  • строит диапазон исключенных часов
  • повторяет коллекцию тестовых объектов datetime
  • , чтобы проверить, если .Hour текущего объекта находится в $ExcludedHours диапазоне
  • , если да, записывает предупреждение на экран, чтобы не нарушать "нормальное рабочее время", люди
  • , если НЕТ, пишет сообщение, которое можно безопасно выполнять ИТ-работу, пока все сотрудники офиса находятся далеко

вот код ...

#region >>> create some date time items to test with
#    when ready to use real data, replace the entire "#region/#endregion" block with the real data source
$RServices = @(
    [PSCustomObject]@{
        Name = 'LastYearElevenP'
        Start_Time = (Get-Date).Date.AddYears(-1).AddHours(23)
        },
    [PSCustomObject]@{
        Name = 'LastMonthElevenP'
        Start_Time = (Get-Date).Date.AddMonths(-1).AddHours(23)
        },
    [PSCustomObject]@{
        Name = 'YesterdayElevenP'
        Start_Time = (Get-Date).Date.AddDays(-1).AddHours(23)
        },
    [PSCustomObject]@{
        Name = 'ZeroA'
        Start_Time = (Get-Date).Date
        },
    [PSCustomObject]@{
        Name = 'OneA'
        Start_Time = (Get-Date).Date.AddHours(1)
        },
    [PSCustomObject]@{
        Name = 'ThreeA'
        Start_Time = (Get-Date).Date.AddHours(3)
        },
    [PSCustomObject]@{
        Name = 'SixA'
        Start_Time = (Get-Date).Date.AddHours(6)
        },
    [PSCustomObject]@{
        Name = 'SevenA'
        Start_Time = (Get-Date).Date.AddHours(7)
        },
    [PSCustomObject]@{
        Name = 'NineA'
        Start_Time = (Get-Date).Date.AddHours(9)
        },
    [PSCustomObject]@{
        Name = 'ElevenP'
        Start_Time = (Get-Date).Date.AddHours(23)
        }
    )
#endregion >>> create some date time items to test with

$StartHour = 6
$EndHour = 22
$ExcludedHours = $StartHour..$EndHour

foreach ($RS_Item in $RServices)
    {
    if ($RS_Item.Start_Time.Hour -in $ExcludedHours)
        {
        Write-Warning ('    {0} is in the Excluded Hours ...' -f $RS_Item.Start_Time.ToString('yyyy-MM-dd HH:mm:ss'))
        Write-Warning '        Do nothing disruptive at this time.'
        }
        else
        {
        '{0} is NOT in the excluded hour range.' -f $RS_Item.Start_Time.ToString('yyyy-MM-dd HH:mm:ss')
        '    Now is the time to do things that the office folks might complain about.'
        }
    '=' * 30
    }

вывод на экран ...

2019-04-29 23:00:00 is NOT in the excluded hour range.
    Now is the time to do things that the office folks might complain about.
==============================
2020-03-29 23:00:00 is NOT in the excluded hour range.
    Now is the time to do things that the office folks might complain about.
==============================
2020-04-28 23:00:00 is NOT in the excluded hour range.
    Now is the time to do things that the office folks might complain about.
==============================
2020-04-29 00:00:00 is NOT in the excluded hour range.
    Now is the time to do things that the office folks might complain about.
==============================
2020-04-29 01:00:00 is NOT in the excluded hour range.
    Now is the time to do things that the office folks might complain about.
==============================
2020-04-29 03:00:00 is NOT in the excluded hour range.
    Now is the time to do things that the office folks might complain about.
==============================
WARNING:     2020-04-29 06:00:00 is in the Excluded Hours ...
WARNING:         Do nothing disruptive at this time.
==============================
WARNING:     2020-04-29 07:00:00 is in the Excluded Hours ...
WARNING:         Do nothing disruptive at this time.
==============================
WARNING:     2020-04-29 09:00:00 is in the Excluded Hours ...
WARNING:         Do nothing disruptive at this time.
==============================
2020-04-29 23:00:00 is NOT in the excluded hour range.
    Now is the time to do things that the office folks might complain about.
==============================
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...