- Вопрос или проблема
- Ответ или решение
- PowerShell: Список необходимых обновлений WSUS для каждого клиента
- 1. Установка соединения с сервером WSUS
- 2. Получение необходимых обновлений за последний месяц
- 3. Получение списка клиентов WSUS
- 4. Составление отчета о необходимых обновлениях для каждого сервера
- 5. Экспорт отчета в файл
- Заключение
Вопрос или проблема
Мне нужно предоставить ежемесячный отчет нашему клиенту, в котором будет перечислено обновления, необходимые для каждого сервера Windows в нашей среде. Идеально, если отчет будет перечислять обновления за месяц и серверы в моей среде, которым они нужны.
Мои знания PowerShell ограничены, но я нашел несколько скриптов (см. ниже) и немного изменил их, чтобы извлечь обновления и цели, но я не могу понять, как объединить эту информацию в один скрипт, который показывает, какие конкретные обновления нужны каждому серверу:
$wsus = Get-WsusServer -Name "<server-name>" -PortNumber 8530
$wsus.GetComputerTargets()
$updates = $wsus.GetUpdates() | where {$_.CreationDate -gt (Get-Date).addMonths(-1) }
# Проходим через каждое обновление, выводим некоторую информацию
$results = ForEach ($update in $updates) {
$update.Title
$update.Description
$update.CreationDate
}
$results | Out-File C:\Temp\results.txt
## Выбираем всех клиентов WSUS, экспортируем в файл
$serverlist = ForEach ($server in $wsus.GetComputerTargets()) {
$server.FullDomainName
$server.OSDescription
}
$serverlist | Out-File C:\Temp\servers.txt
Буду признателен за любые предложения или советы, спасибо!
Я потратил некоторое время на поиск, варианты ужасные, очевидно, что MS нужно решить эту проблему.
Я использовал приведенное ниже, что довольно сложно, скопируйте все для использования, включая блоки до “endregion send email”:
Благодарность https://github.com/proxb/WSUSReport/blob/master/WSUSReport.ps1 за основной скрипт, у меня были трудности в том, чтобы включить количество необходимых обновлений сервера.
Я добавил в строку 275 или после сортировки по Computername в разделе “#Failed Installations”:
#Needed Count
$computerscope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope
$updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$GroupNeededHash=@{}
$ComputerUpdatesNeeded = $wsus.GetSummariesPerComputerTarget($updatescope,$computerscope) | Select @{L='ComputerTarget';E={($wsus.GetComputerTarget([guid]$_.ComputerTargetId)).FullDomainName}}, `
@{L='NeededCount';E={($_.DownloadedCount + $_.NotInstalledCount)}} | Where-Object { $_.NeededCount -ne '0' }| Sort NeededCount -Descending | ForEach {
}
а затем в строку 538 или после “#endregion Failed Update Install”:
#region Needed Update Install
$Pre = @"
<div style="margin: 0px auto; BACKGROUND-COLOR:RED;Color:Black;font-weight:bold;FONT-SIZE: 14pt;">
Необходимые установки обновлений по компьютерам
</div>
"@
$Body = $wsus.GetSummariesPerComputerTarget($updatescope,$computerscope) | Select @{L='ComputerTarget';E={($wsus.GetComputerTarget([guid]$_.ComputerTargetId)).FullDomainName}}, `
@{L='NeededCount';E={($_.DownloadedCount + $_.NotInstalledCount)}} | Where-Object { $_.NeededCount -gt '4' }| Sort NeededCount -Descending | ConvertTo-Html -Fragment | Out-String | Set-AlternatingCSSClass -CSSEvenClass 'even' -CssOddClass 'odd'
$Post = "<br>"
$htmlFragment += $Pre,$Body,$Post
#endregion Needed Update Install
Ответ или решение
PowerShell: Список необходимых обновлений WSUS для каждого клиента
В качестве IT-эксперта, я понимаю, что создание отчета по необходимым обновлениям для серверов Windows является важной задачей, особенно когда вам нужно предоставить эту информацию вашему клиенту ежемесячно. Ниже я подробно опишу, как объединить информацию о необходимых обновлениях для каждого сервера в едином PowerShell-скрипте.
1. Установка соединения с сервером WSUS
Сначала создайте подключение к вашему серверу WSUS, используя следующий код:
$wsus = Get-WsusServer -Name "<server-name>" -PortNumber 8530
2. Получение необходимых обновлений за последний месяц
Затем получите обновления, созданные за последний месяц:
$updates = $wsus.GetUpdates() | Where-Object { $_.CreationDate -gt (Get-Date).AddMonths(-1) }
3. Получение списка клиентов WSUS
Теперь получите список всех компьютеров (клиентов), зарегистрированных на вашем сервере WSUS:
$clients = $wsus.GetComputerTargets()
4. Составление отчета о необходимых обновлениях для каждого сервера
На следующем этапе объедините информацию о каждом клиенте и необходимых обновлениях. Мы будем использовать цикл ForEach
, чтобы пройтись по каждому клиенту и собрать данные о необходимых для него обновлениях:
$report = @()
foreach ($client in $clients) {
$neededUpdates = @()
foreach ($update in $updates) {
$updateInfo = $wsus.GetUpdateStatus([$client.Id])
if ($updateInfo["NotInstalledCount"] -gt 0) {
$neededUpdates += $update.Title
}
}
if ($neededUpdates.Count -gt 0) {
$report += [PSCustomObject]@{
ComputerName = $client.FullDomainName
OSDescription = $client.OSDescription
NeededUpdates = $neededUpdates -join "; "
}
}
}
5. Экспорт отчета в файл
Наконец, экспортируйте собранный отчет в файл, чтобы передать его клиенту:
$report | Export-Csv -Path "C:\Temp\WSUS_Report.csv" -NoTypeInformation
Заключение
Теперь у вас есть скрипт PowerShell, который собирает необходимые обновления для каждого клиента WSUS и экспортирует этот отчет в формате CSV. Вы можете настроить путь к файлу и формат вывода в соответствии с вашими предпочтениями. Этот подход позволяет вам легко предоставлять актуальную информацию о состоянии обновлений в вашей среде, что, безусловно, будет полезно для вашего клиента.
Если у вас возникнут дополнительные вопросы или потребуется помощь в настройке скрипта, не стесняйтесь обращаться!