让我试着解释一下我的问题。我有一个离线系统(多个虚拟和物理服务器),通过 SCCM 提供更新。我们定期从上级部门获取更新。内容通过 robocopy 复制,元数据通过 WSUSUTIL.exe 导入
问题是,内容是通过部门的(可能是)脚本缩减的,因此我们拥有的元数据比实际文件多。这给我们在尝试下载软件更新组时带来了很多问题。我们获得了一本手册,用于过滤未包含的更新,但这是一种耗时且并不总是可靠的方法。
我不知道是否存在技术困难或组织困难导致事情变成这样,但我担心我无法改变这一点。
然而,我想到了一个主意,如何自动将我拥有的所有更新作为文件获取。
$list = [System.Collections.ArrayList] @()
$Finallist = [System.Collections.ArrayList] @()
net use Z: \\<WSUSServer_Content> /persistent:no
Function Select-FolderDialog
{
param([string]$Description="Select Folder",[string]$RootFolder="Desktop")
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
Out-Null
$objForm = New-Object System.Windows.Forms.FolderBrowserDialog
$objForm.Rootfolder = $RootFolder
$objForm.Description = $Description
$Show = $objForm.ShowDialog()
If ($Show -eq "OK")
{
Return $objForm.SelectedPath
}
Else
{
Write-Error "Operation cancelled by user."
}
}
$Folder = Select-FolderDialog
$updates1 = get-childitem -path $folder -file -r
$updates = $Updates1.name
[void][reflection.assembly]::loadwithpartialname("Microsoft.Updateservices.administration")
$updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope
$updatescope.FromArrivalDate = [datetime]"12/31/2018"
$Getupdate = (get-wsusserver).getupdates($updatescope)
foreach ($Update in $Getupdate)
{
$cab = $update.getinstallableitems().files.fileuri.segments | select-object -last 1
foreach ($item in $updates) {if ($item -eq $cab) {$list = $list + $Update.id.updateid} }
}
import-module 'd:\"SCCMServer"\ConfigurationManager.psd1'
cd S01:
$Softwareupdates = get-cmsoftwareupdate -datepostedmin "31.12.2018"
foreach ($Softwareupdate in $Softwareupdates) {
Unique=Softwareupdate.CI_UniqueID
foreach ($li in $list){
if ($li -eq $Unique) {$Finallist = $Finallist + $Softwareupdate.CI_ID}
}
}
New-CMSoftwareUpdateGroup -name "Test" -UpdateId $Finallist
我的想法是,我收集我拥有的内容的所有文件名,将它们与 WSUS 服务器一起运行,这样我就可以找出 Unique_ID。然后,我根据 SCCM 运行 Unique_ID,这样我就可以获取 ID,然后我就可以创建软件更新组。到目前为止,这只是理论。
如果我运行该脚本,我会得到大约 800 个更新文件。这些文件会产生大约 250 个 Unique_ID,从而为 SCCM 产生大约 35 个 ID。当我尝试下载这些文件时,我会遇到下载错误。
如果我的逻辑正确的话,这不应该发生,对吗?
我的逻辑正确吗?或者是因为编码不好,因为我不是 powershell 专家?
感谢您的意见,对于代码格式混乱以及我的英语不好,深表歉意。
祝你今天过得愉快。
答案1
首先,如果您使用 SCCM 部署软件更新,那么您永远不必从 WSUS 复制更新文件,因为 SCCM 会自动管理更新文件并将其存储在分发点上。您需要做的就是为要分发的位置添加分发点。我建议您根据每月/每季度/累计对更新进行分类。这将使您更容易过滤更新。与 WSUS 相比,SCCM 在其数据库中引用更新的方式截然不同。正如 DavidW 所建议的,上级部门必须尝试找到一种新的工作流程,使其更简单、更易于部署和管理。