Назад | Перейти на главную страницу

PowerShell проверяет обновление Windows на сервере

У нас около 1000+ серверов, мы ежемесячно вносим исправления. Мне нужно проверить, обновлены ли исправления на серверах или нет, можно ли проверить на основе номеров бюллетеней безопасности Microsoft (например, MS14-40.) с помощью PowerShell.

С уважением, Картик V

Я полагаю, что с 1000+ серверами у вас есть экземпляр WSUS в вашей среде? Вы можете получить много информации об этом с помощью PowerShell. Это фрагмент, который я использую на нашем сервере WSUS (или через удаленный ps):

$wsus = Get-WsusServer
$servers = @("server1","server17","pol-server3","pol-server4")

$servers | % {
   $servername = $_
   $server = $wsus.GetComputerTargets() | ? { $_.FullDomainName -imatch $servername }
   If ($server) {
      New-Object PSObject -Property @{
         Server = $servername
         Installed = $server.GetUpdateInstallationSummary().InstalledCount
         NotInstalled = $server.GetUpdateInstallationSummary().NotInstalledCount
      }
   }
} | ft -auto

Полученные результаты:

Server        Installed NotInstalled
------        --------- ------------
server1             144           21
server17            144           21
pol-server3         149           21
pol-server4         100           37

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

get-hotfix | WHERE {$_.hotfixID -eq 'KB******'}

Вы получите обновление с установленным временем и т. Д.

WMI раньше мог запрашивать их через класс QuickfixEngineering, но я чувствую, что это не так хорошо работает в Vista или более поздних версиях:

Get-WMIObject -Class "Win32_QuickFixEngineering" -Computer <computername>

Для этого я бы, вероятно, предложил использовать WSUS, если у вас есть централизованное управление исправлениями. Вы можете добавить столбец для номера MSRC в представление «Все обновления», и в отчете будет указано, в каких системах оно установлено. Поскольку это всего лишь база данных SQL, вы можете создать несколько вызовов через Powershell для извлечения этих данных, но в настоящее время это выходит за рамки меня.