首页 > 解决方案 > 使用 Powershell 进行网络安装修补程序

问题描述

我可能会让这件事复杂化。事实上,我保证我尝试这样做的方式可能很糟糕。我有几台机器(<30)排序混乱,修补程序明智。我有一个包含所有 *.msu 文件的中央服务器。我无法配置 WSUS。我想做以下事情:

扫描机器以查找已安装的修补程序,将该列表与服务器上的可用修补程序进行比较,安装缺少的任何内容,重新启动

这是我到目前为止解决的问题:

列出所有已安装的修补程序,但仅拉出具有 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 的 KB 名称(如果我可以做下一件事,这可能是不必要的)

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

在 $allHFs 中搜索 $installedHotFixes 的内容,删除任何匹配的行,将不匹配的内容导出为文本。我认为这行不通。

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 及其功能(显然)不是很好。有一个更好的方法吗?提前致谢!

标签: windowspowershellpatchhotfix

解决方案


推荐阅读