Сетевые исправления с помощью Powershell - PullRequest
1 голос
/ 06 апреля 2020

Я мог бы усложнить это. На самом деле, я гарантировал, что способ, которым я пытаюсь это сделать, вероятно, ужасен. У меня есть несколько машин (<30), которые разбиты в беспорядке, с исправлениями. У меня есть центральный сервер, который содержит все файлы * .msu. Я не могу настроить WSUS. Я хотел бы сделать следующее: </p>

Сканирование машины на наличие установленных исправлений, сравнение этого списка с доступными исправлениями на сервере, установка всего, что отсутствует, перезагрузка

И вот беспорядок, который я ' Мы до сих пор работали:

Перечислите все установленные исправления, но только извлеките столбец с KB #. Поместить в текстовый файл.

$installedHotFixes = Get-HotFix | Select-Object HotFixID
$installedHotFixes > installedHF.txt

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

$dir = (Get-Item -Path "\\patches\patch" -Verbose).FullName
$allHFs = Foreach($item in (Get-ChildItem -Recurse \\patches\patch *.msu -Name))
{
$item = $dir + "\" + $item
echo $item
}
$allHFs > allHFs.txt

Получите имена в КБ для всех HF (это может быть ненужным, если я могу сделать следующее)

$allHFs | Select-String -Pattern "kb\d*" | Select-Object { $_.Matches } > patch_kb_only.txt

поиск в $ allHFs содержимого $ Установленные HotFixes, удалить любую строку, которая соответствует, экспортировать несоответствия в текст. Я не думаю, что это работает.

Foreach($item in $installedHotFixes
{
$allHFs | Select-String -Pattern "$item" | Select-Object { $_.Matches } > patch_kb_only.txt
}

сравните приведенный выше список со списком всех исправлений, доступных в \ patch, удалите дубликаты, выведите в новый список

$installList = Get-Content 'installedHF.txt','allHFs.txt' | Group-Object | where-Object {$_.count -eq 1} | Foreach-object {$_.group[0]} | Set-Content 'install_these_hf2.txt'

И вот где Я ушел с работы на несколько дней и вроде как забыл, что, черт возьми, я делал. Я выводил вещи в текстовый файл, потому что это единственный способ сравнить содержимое списка, так как я не очень хорош в PowerShell и его возможностях (очевидно). Есть лучший способ сделать это? Заранее спасибо!

...