sccm 和 wsus 问题

sccm 和 wsus 问题

让我试着解释一下我的问题。我有一个离线系统(多个虚拟和物理服务器),通过 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 所建议的,上级部门必须尝试找到一种新的工作流程,使其更简单、更易于部署和管理。

相关内容