Невозможно отфильтровать объект get-wmi на основе InstalledOn - PullRequest
0 голосов
/ 23 апреля 2020

Мое требование - установить все последние обновления в моей системе. «get-wmiobject» предоставляет мне данные обо всех обновлениях, установленных в моей системе. Код, который я написал здесь:

Метод 1:

$y = get-wmiobject -class win32_quickfixengineering | sort-object -Property InstalledOn -Descending | select-object -Property * -First 1
$x = Get-Date $y.InstalledOn
Write-Host $x
get-wmiobject -class win32_quickfixengineering -Filter "InstalledOn='$x'" 

Метод 2:

$y = get-wmiobject -class win32_quickfixengineering | sort-object -Property InstalledOn -Descending | select-object -Property * -First 1
$z = $y.InstalledOn
Write-Host $z
get-wmiobject -class win32_quickfixengineering -Filter "InstalledOn='$z'" 

Все это дает мне пустой вывод. Все это будет работать с фильтрацией строк, но не работает с фильтрацией даты. Что здесь не так?

Однако работает приведенный ниже код:

$y = get-wmiobject -class win32_quickfixengineering | sort-object -Property InstalledOn -Descending | select-object -Property * -First 1
get-wmiobject -class win32_quickfixengineering | Where-Object {$_.InstalledOn -eq $y.InstalledOn}

Я хотел бы знать, почему фильтр не работает.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Installedon - это свойство скрипта, которое преобразует исходную строку, такую ​​как '8/2/2019', в объект datetime. Исходная строка не подходит для сортировки.

$a = get-wmiobject win32_quickfixengineering | select -last 1


$a | gm installedon | fl *

TypeName   : System.Management.ManagementObject#root\cimv2\Win32_QuickFixEngineering
Name       : InstalledOn
MemberType : ScriptProperty
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
                       }
                       };}



$a.psbase.properties['installedon'].value

8/2/2019


get-wmiobject win32_quickfixengineering -filter "installedon='8/2/2019'"

Source        Description      HotFixID      InstalledBy          InstalledOn
------        -----------      --------      -----------          -----------
DESKTOP-JQ... Security Update  KB4493470     NT AUTHORITY\SYSTEM  8/2/2019 12:00:00 AM
0 голосов
/ 23 апреля 2020

Я не знаю, почему -Filter, который вы пытаетесь использовать, не работает. я не могу заставить это работать вообще. по-видимому, используемый QueryLanguage имеет некоторую странность, которая четко не задокументирована. [ sigh ... ]

однако, если все, что вам нужно, это элементы QFE, которые были применены в последний день в списке QFE, следующие работы ... [ ухмылка ]

  • использует Get-HotFix вместо вызовов CIM / WMi
    это не быстрее, но кажется более powershell-i sh.
  • сортирует по свойству InstalledOn с самыми новыми 1-ыми
  • группами по этому опору
  • выбирает 1-ую группу
  • , получает значение .Group из этого группа
  • назначает его $NewestQFE_Group
  • показывает его на экране

код ...

$NewestQFE_Group = (Get-HotFix |
    Sort-Object -Descending -Property 'InstalledOn' |
    Group-Object -Property 'InstalledOn')[0].Group

$NewestQFE_Group

вывод [да, я все еще на win7 [ ухмыляюсь ]] ...

Source        Description      HotFixID      InstalledBy          InstalledOn              
------        -----------      --------      -----------          -----------              
MySysName     Security Update  KB4534310     NT AUTHORITY\SYSTEM  2020-01-15 12:00:00 AM   
MySysName     Security Update  KB4536952     NT AUTHORITY\SYSTEM  2020-01-15 12:00:00 AM   
MySysName     Update           KB4532945     NT AUTHORITY\SYSTEM  2020-01-15 12:00:00 AM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...