none
Powershell вывести обновления установленные сегодня RRS feed

  • Вопрос

  • Добрый день. Подскажите пожалуйста, как вывести обновления установленные сегодня?

    Был такой кусок кода:

    $VarKB = Get-Date -Format 
    d$button_Click2 = Get-HotFix | ? installedon -gt $VarKB | Select HotFixID, Description, InstalledOn | Format-List | Out-String

    В общем-то он работал, а потом стал писать следующее:

    ? : Сбой оператора "Igt": Не удается сравнить "11/01/2020 00:00:00" с "22.02.20
    20". Ошибка: "Не удается преобразовать значение "22.02.2020" в тип "System.Date
    Time". Ошибка: "Строка не распознана как действительное значение DateTime."".
    строка:3 знак:31
    + $button_Click2 = Get-HotFix | ? installedon -gt $VarKB | Select HotFixID, Des
    cri ...

    Подскажите, как сделать так, чтобы выводились установленные за сегодня обновления?

    22 февраля 2020 г. 14:32

Все ответы

  • День добрый

    Get-HotFix | ? installedon -gt (Get-Date).Date | Select HotFixID, Description, InstalledOn | Format-List | Out-String


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram

    22 февраля 2020 г. 17:17
  • Здравствуйте,

    Как вариант попробуйте так:
    $Today = Get-Date -UFormat "%m/%d/%Y 12:00:00 AM"
    Get-HotFix | ? installedon -eq $Today | Select HotFixID, Description, InstalledOn | Format-List | Out-String

    P.S. В моем случая, время всегда указывается 12:00:00 AM для всех обновлений.

    Avis de non-responsabilité:
    Mon opinion ne peut pas coïncider avec la position officielle de Microsoft.

    Bien cordialement, Andrei ...

    MCP

    23 февраля 2020 г. 2:14
    Модератор
  • Добрый день. Попробовал в различных вариантах ваш код, не помогло. :(

    В ответ пустота. Пробовал менять формат даты без РМ и АМ, и 0:00:00...что-то не помогло... Скрин:

    23 февраля 2020 г. 11:21
  • Пробовал примерно так же делать, даже в американский формат дату выводил...результата нет.

    Почему-то по такому запросу выдает следующее:

    23 февраля 2020 г. 11:26
  • Есть идея попробовать распарсить дату без "АМ, РМ", но что-то пока не получается.

    $varKB = (Get-Date).ToString([CultureInfo]::GetCultureInfo('en-US'))
     [datetime]::ParseExact($varKB, 'M/d/yyyy h:m:s tt', [cultureinfo]::GetCultureInfo('en-US'))
     $varkb

    Вот как бы отсюда убрать "tt" попробовать?

    Если у кого-нибудь есть еще идеи, с радостью опробую их)

    23 февраля 2020 г. 11:27
  • Пробовал примерно так же делать, даже в американский формат дату выводил...результата нет.

    Почему-то по такому запросу выдает следующее:

    есть предположение что если искать не обновления которые установлены -GT чем сегодня (завтра например), а -GE (сегодня и новее...) то результатов будет больше ;-)

    Пример:

    А еще если вы в простых задачах получаете что-то по типу того что написали в последнем сообщении, то скорее всего вы что-то делаете не так ;-)


    The opinion expressed by me is not an official position of Microsoft

    23 февраля 2020 г. 14:08
    Модератор
  • Здравствуйте,

    А если так?
    $Today = (get-date -UFormat "%m.%d.%Y").trimstart('0')
    Get-HotFix | ? installedon -match $Today | Select HotFixID, Description, InstalledOn | Format-List | Out-String


    Avis de non-responsabilité:
    Mon opinion ne peut pas coïncider avec la position officielle de Microsoft.

    Bien cordialement, Andrei ...

    MCP

    • Изменено SQxModerator 23 февраля 2020 г. 14:30 обновлен формат
    23 февраля 2020 г. 14:27
    Модератор
  • Здравствуйте,

    А если так?
    $Today = (get-date -UFormat "%m.%d.%Y").trimstart('0')
    Get-HotFix | ? installedon -match $Today | Select HotFixID, Description, InstalledOn | Format-List | Out-String


    Avis de non-responsabilité:
    Mon opinion ne peut pas coïncider avec la position officielle de Microsoft.

    Bien cordialement, Andrei ...

    MCP

    -UFormat создает строку, из типа [datetime]

    сравнение строк это painass процесс которого если можно избегать стоит этого избегать

    пример:

    к слову installedon так же имеет тип [datetime]

    # Пример получения обнов за посление 20 дней
    Get-HotFix | Where { $_.InstalledOn -ge (get-date).AddDays(-20) }
    
    # Пример получения обнов за послений 1 день
    Get-HotFix | Where { $_.InstalledOn -gt (get-date).AddDays(-1) }
    
    # Если предыдущий запрос не вернул ничего то смотрим вывод 
    Get-HotFix 
    # так как вполне возможно обнов за прошлый день не было



    The opinion expressed by me is not an official position of Microsoft

    23 февраля 2020 г. 14:39
    Модератор
  • Get-HotFix | Where { $_.InstalledOn -gt (get-date).AddDays(-1) }

    Выглядит интересно, но выводит так же KB которые установлены ранее. Обновление сегодня 1 точно установлено. Должно вот только его и показать...

    23 февраля 2020 г. 15:31
  • Так формат даты визуально правильно заносится в переменную, но на результат к сожалению не повлияло. Все так же ничего не выводит. Или вывод более старые обновления в зависимости от оператора сравнения.
    23 февраля 2020 г. 15:33
  • Get-HotFix | Where { $_.InstalledOn -gt (get-date).AddDays(-1) }

    Выглядит интересно, но выводит так же KB которые установлены ранее. Обновление сегодня 1 точно установлено. Должно вот только его и показать...

    Покажите вывод этой команды (что бы команду было видно)

    а после вывод Get-Hotfix (аналогично команду и вывод)

    На какой ос вы проверяете команды?

    покажите так же вывод (get-hotfix)[0].installedon.gettype()


    The opinion expressed by me is not an official position of Microsoft


    23 февраля 2020 г. 15:36
    Модератор
  • Здравствуйте,

    Попробуйте также видо изменений формат:

    $day=(get-date).Day
    $month=(get-date).Month
    $year=(get-date).Year
    Get-HotFix | ? installedon -match $month'.*'$day'.*'$year | Select HotFixID, Description, InstalledOn | Format-List | Out-String


    Avis de non-responsabilité:
    Mon opinion ne peut pas coïncider avec la position officielle de Microsoft.

    Bien cordialement, Andrei ...

    MCP

    23 февраля 2020 г. 15:46
    Модератор
  • Чтобы не верняка получилось, я модифицировал скрипт в powershell (проверил на различных системах, вроде работает как часы):

    $day=(get-date).Day
    $month=(get-date).Month
    $year=(get-date).Year
    Get-HotFix | Select-Object -Property HotFixID, Description, InstalledOn | Where {$_.InstalledOn.Day -eq $day -and $_.InstalledOn.Month -eq $month -and $_.InstalledOn.Year -eq $year } | Format-List | Out-String


    Avis de non-responsabilité:
    Mon opinion ne peut pas coïncider avec la position officielle de Microsoft.

    Bien cordialement, Andrei ...

    MCP

    23 февраля 2020 г. 16:13
    Модератор
  • windows 8.1 , но вообще в теории требуется, чтобы работало и на windows 10.

    25 февраля 2020 г. 16:04
  • К сожалению результат тоже пустой.
    25 февраля 2020 г. 16:07
  • У меня результат пустой.

    Обновления есть установленные сегодняшним днем. Но почему-то не выводит их. :(

    25 февраля 2020 г. 16:09
  • Заметил вот что:

    Get-HotFix | ? installedon -eq '10.01.2020' | Select HotFixID, Description, InstalledOn | Format-List | Out-String

    Ввожу конкретную дату, но наоборот.

    то есть при InstalledOn пишет: "InstalledOn : 01.10.2020 0:00:00"

    Я вбиваю как выше указано дату, наоборот месяц и день? "10.01.2020." и находит нужный запрос.

    Но если вбить сегодня дату (25.02.2020 или 02.25.2020) то вывод пустой.

    по всей видимости при установке даты не попадают в InstalledOn. В установленных обновлениях даты есть. Может быть еще где-то хранится дата установку, кроме InstalledOn?


    • Изменено DailonWong 25 февраля 2020 г. 16:29
    25 февраля 2020 г. 16:22
  • если в поле installedon возвращается дата в некоем странном формате, с которым у вас некорреrтно работают операторы сравнения, то попробуйте привести это поле к типу datetime самостоятельно (преобразуйте его в строку, а затем соберите в формате ""MM/dd/yyyy" и приведите эту строку к формату [datetime])

    my blog: http://shserg.ru/


    • Изменено s.h.s. _ 28 февраля 2020 г. 7:03
    27 февраля 2020 г. 8:03

  • $day=(get-date).Day
    $month=(get-date).Month
    $year=(get-date).Year
    Get-HotFix | Select-Object -Property HotFixID, Description, InstalledOn | Where {$_.InstalledOn.Day -eq $day -and $_.InstalledOn.Month -eq $month -and $_.InstalledOn.Year -eq $year } | Format-List | Out-String


    Здравствуйте,

    Уточните пожалуйста, вы тестировали мой ранее указанный вариант?

    Avis de non-responsabilité:
    Mon opinion ne peut pas coïncider avec la position officielle de Microsoft.

    Bien cordialement, Andrei ...

    MCP

    27 февраля 2020 г. 16:30
    Модератор
  • Я вбиваю как выше указано дату, наоборот месяц и день? "10.01.2020." и находит нужный запрос.

    Но если вбить сегодня дату (25.02.2020 или 02.25.2020) то вывод пустой.

    по всей видимости при установке даты не попадают в InstalledOn. В установленных обновлениях даты есть. Может быть еще где-то хранится дата установку, кроме InstalledOn?


    Надо вбивать дату в "американском" формате.  Странно, но Вы пишите, что уже проверяли.

    У меня  и так  и так  работает:

    Get-HotFix|? installedon -eq  01/16/2020 | Select HotFixID,installedOn | Out-String

    Get-HotFix|? installedon -eq  01.16.2020 | Select HotFixID,installedOn | Out-String

    16 января  - день установки последнего    

    25 месяца  не бывает, поэтому  сбой 

    27 февраля 2020 г. 20:53
  • Я вбиваю как выше указано дату, наоборот месяц и день? "10.01.2020." и находит нужный запрос.

    Но если вбить сегодня дату (25.02.2020 или 02.25.2020) то вывод пустой.

    по всей видимости при установке даты не попадают в InstalledOn. В установленных обновлениях даты есть. Может быть еще где-то хранится дата установку, кроме InstalledOn?


    Надо вбивать дату в "американском" формате.  Странно, но Вы пишите, что уже проверяли.

    У меня  и так  и так  работает:

    Get-HotFix|? installedon -eq  01/16/2020 | Select HotFixID,installedOn | Out-String

    Get-HotFix|? installedon -eq  01.16.2020 | Select HotFixID,installedOn | Out-String

    16 января  - день установки последнего    

    25 месяца  не бывает, поэтому  сбой 

    SQx, RH6M6, вангую что мы все дружно (кроме автора) проверяем тоже самое на англоязычных ос, и что-то мне думается что формат "даты" в свойстве InstalledOn кривой в русскоязычной ос которую как раз автор и использует

    Решение может быть в предложении s.h.s _, или в использовании альтернативных путей нахождения необходимой информации (например через wmi)


    The opinion expressed by me is not an official position of Microsoft

    27 февраля 2020 г. 21:13
    Модератор
  • У меня русская семерка  (потому последнее обновление - январь)  Всё происходящее вполне соответствует описанию ТС:  если вводить в привычном для нас формате в начале месяца, то ОК, а если в конце, то << Не удается сравнить "11/01/2020 00:00:00" с "22.02.2020">>. так как число и месяц путаются, а месяцев всего 12.  Подождем ТС


    • Изменено RH6M6 28 февраля 2020 г. 5:16
    28 февраля 2020 г. 4:58
  • а также было бы любопытно взглянуть на результат выполнения

    (Get-HotFix| gm|?{$_.Name -eq "InstalledOn"}).Definition


    на той машине, где у вас некорректно выполняется сравнение по полю  InstalledOn.

    На win10 получаю следующее:

    C:\> (Get-HotFix| gm|?{$_.Name -eq "InstalledOn"}).Definition

    System.Object InstalledOn {get=if ([environment]::osversion.version.build -ge 7000) { # WMI team fixed the formatting issue related to InstalledOn # property in Windows7 (to return string)..so returning the WMI's # version directly [DateTime]::Parse($this.psBase.properties["InstalledOn"].Value, [System.Globalization.DateTimeFormatInfo]::new()) } else { $orig = $this.psBase.properties["InstalledOn"].Value $date = [datetime]::FromFileTimeUTC($("0x" + $orig)) if ($date -lt "1/1/1980") { if ($orig -match "([0-9]{4})([01][0-9])([012][0-9])") { new-object datetime @([int]$matches[1], [int]$matches[2], [int]$matches[3]) } } else { $date } };}



    my blog: http://shserg.ru/




    • Изменено s.h.s. _ 28 февраля 2020 г. 7:10
    28 февраля 2020 г. 7:08
  • Формат, может быть и не совсем кривой, но если он получился Culture-зависимый, то в конечном итоге кривость где-нибудь вылезет.Например, такой скрипт

     $a = 10/3 >  b
    $b = (Get-content b)/4 | out-host 

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

    29 февраля 2020 г. 6:00