Статус установки обновлений для рабочих станций через WSUS на Powershell

Статус установки обновлений для рабочих станций через WSUS на Powershell

Когда у вас есть сразу несколько серверов WSUS с центральным корневым, бывает очень проблематично получать отчеты об обновлениях рабочих станций.

Мне был нужен скрипт, который покажет, что на каких-то компьютерах есть не установленные одобренные обновления. Такой отчет есть в консоли WSUS, он называется Computer Tabular Status for Approved Updates

Но это достаточно трудоемкая задача, когда у вас 5-10-15 серверов.

Решение

Я написал скрипт в среде Powershell, который автоматизирует задачу получения отчетов из WSUS.

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

Скрипт

На строках 2, 4 и 7 находятся переменные, которые можно менять по необходимости.

$datetime = Get-Date -Format "yyyy.MM.dd_HH-mm-ss";
$domain = "domain.local";
$serverName = "wsus10.domain.local";
$file_name = "wsus_audit_result_" + $domain + "_" + $datetime + ".csv";
$xl_filename = "c:\audit\" + $file_name;

[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($serverName, $false)

$computerscope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope
$computerscope.IncludeSubgroups = $true;
$computerscope.IncludeDownstreamComputerTargets = $true;
$computerscope.IncludedInstallationStates = [Microsoft.UpdateServices.Administration.UpdateInstallationStates] "Failed, NotInstalled, Downloaded";

$updates = $wsus.GetUpdates() | where {$_.IsApproved -eq $true};

$array = @{};
foreach ($update in $updates) {
	$temp = $update.GetUpdateInstallationInfoPerComputerTarget($ComputerScope) | ?{$_.UpdateApprovalAction -eq "Install"}
		
	if ($temp -ne $null)
    {
		foreach ($item in $temp)
        {
			$array.($wsus.GetComputerTarget([guid]$item.ComputerTargetId).FulldomainName)++;
		}
	}
}

$export_array = @();
$export_array += ,@("");$export_array += ,@("");

$i = 1;
foreach ($key in $array.Keys)
{
	if ($key.split(".")[1] -eq $domain.split(".")[0])
    {
		$export_array += ,@($key.Split(".")[0], $key.Split(".")[1], $array.$key);
	}
}

Write-Output "Saving report ...";
foreach($item1 in $export_array)  
{  
	$csv_string = "";
	foreach($item in $item1)
	{
		$csv_string = $csv_string + $item + ";";
	}
	Add-Content $xl_filename $csv_string;
}

 

Отработка команд занимает достаточно продолжительное время, т.к. для каждого компьютера, зарегистрированного в WSUS, делается запрос на сервер по HTTP-протоколу. Это достаточно медленная процедура. Поэтому придется подождать. 

 

И еще...

Не пытайтесь запустить скрипт на обычном сервере или компьютере. Корректно работать он будет только на сервере, где установлена консоль управления WSUS.

powershell (ru), скрипт, wsus

  • Просмотров: 9714
Добавить комментарий

Related Articles