none
Удаление апдейтов со SCUP на SCCM RRS feed

  • Вопрос

  • Добрый день!

    Начал разбираться в SCCM и столкнулся с проблемой.

    В офисной инфраструктуре имеется схема при которой через SCUP закачиваются обновления и новые версии стороннего софта, который в дальнейшем, раз в неделю, импортируется руками в SCCM, объединяются в SCCM в единый пакет "SCUP Updates" и автоматически разворачиваются на компьютеры пользователей. Всё бы отлично, при переносе новых версий программ из базы SCUP в SCCM как правило старые обновления автоматически затируются для расcпостранения. Но есть часть апдейтов который по какой-то причине не хотят удаляться и даже если их удалить из распространения на SCCM руками они всё-ровно на следующий день там появятся. 

    С чем это связано не удаётся понять, т.к. все возможные связи в All Software Updates обрываются, а в Deployment Packages апдейты затем удаляются, с обновлением Distribution Points но они по прежнему каждый день появляются в SCCM. Возможно я где-то что-то проглядел и нужно снять ещё 1 галку, но почитав разные форумы ничего не нашёл. 

    Красным помечены апдейты которые воскресают каждый день.


    30 марта 2018 г. 7:06

Ответы

  • День добрый.

    Схему бы поменять желательно. Не заменять обновления а выпускать новые (с новым UpdateID) которые "заменяют предыдущие" или помечать предыдущие как устаревшие.

    Выделенные обновления в текущий момент существуют в SCUP?

    Если да - пометьте как Expired.

    Если нет, придётся удалять их из метаданных WSUS, затем делать полную синхронизацию SUP<-WSUS

    Это не сложно, на примере обновления "Acrobat 10.0.1":

    $UpdateTitle = 'Acrobat 10.0.1'
    
    ################################
    Import-Module "$env:SMS_ADMIN_UI_PATH\..\configurationmanager.psd1"
    $SiteCode = Get-PSDrive -PSProvider CMSITE
    Set-Location "$($SiteCode.Name):\"
    ####
    [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
    $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("localhost",$false,"8530");
    #############################
    
    $Update = , $wsus.SearchUpdates($UpdateTitle)
    $Update | ft -AutoSize Title, *Titles
    if ($Update.count -ne 1) {
        $p = Read-Host "Обновлений больше 1-го, точно фильтр верный? (y/n)"
        if ($p -ne 'y') {exit}
    }
    
    $Update | ForEach-Object {
        $wsus.DeleteUpdate($_.Id.UpdateId.ToString())
        Write-Host $_.Title removed 
    }

    После того как удалите метаданные обонвлений из WSUS
    запустите полную синхронизацию SUP:

    Sync-CMSoftwareUpdate -FullSync $true

    p.s.

    т.е. нельзя просто удалять в SCUP активное обновление - обновление всегда надо делать заменённым (Supersedence) другим обновлением, или помечать как Expired, затем публикация в WSUS потом уже что угодно можно с ним делать.


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram


    30 марта 2018 г. 13:32
    Модератор

Все ответы

  • эм ... сложно )

    они ведь приходят с описаний в SCUP'e. Вы используете сторонние каталоги для SCUP'a? Вот я думаю, что вопрос надо туда адресовать.


    SCCM Blog: masyan.ru SCCM User Group Russia: https://www.facebook.com/groups/sccm.russia/ Telegram: https://t.me/configmgr и https://t.me/MicrosoftRus

    30 марта 2018 г. 13:16
    Модератор
  • День добрый.

    Схему бы поменять желательно. Не заменять обновления а выпускать новые (с новым UpdateID) которые "заменяют предыдущие" или помечать предыдущие как устаревшие.

    Выделенные обновления в текущий момент существуют в SCUP?

    Если да - пометьте как Expired.

    Если нет, придётся удалять их из метаданных WSUS, затем делать полную синхронизацию SUP<-WSUS

    Это не сложно, на примере обновления "Acrobat 10.0.1":

    $UpdateTitle = 'Acrobat 10.0.1'
    
    ################################
    Import-Module "$env:SMS_ADMIN_UI_PATH\..\configurationmanager.psd1"
    $SiteCode = Get-PSDrive -PSProvider CMSITE
    Set-Location "$($SiteCode.Name):\"
    ####
    [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
    $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("localhost",$false,"8530");
    #############################
    
    $Update = , $wsus.SearchUpdates($UpdateTitle)
    $Update | ft -AutoSize Title, *Titles
    if ($Update.count -ne 1) {
        $p = Read-Host "Обновлений больше 1-го, точно фильтр верный? (y/n)"
        if ($p -ne 'y') {exit}
    }
    
    $Update | ForEach-Object {
        $wsus.DeleteUpdate($_.Id.UpdateId.ToString())
        Write-Host $_.Title removed 
    }

    После того как удалите метаданные обонвлений из WSUS
    запустите полную синхронизацию SUP:

    Sync-CMSoftwareUpdate -FullSync $true

    p.s.

    т.е. нельзя просто удалять в SCUP активное обновление - обновление всегда надо делать заменённым (Supersedence) другим обновлением, или помечать как Expired, затем публикация в WSUS потом уже что угодно можно с ним делать.


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram


    30 марта 2018 г. 13:32
    Модератор
  • Выделенных обновлений в данный момент в SCUP нет, устаревшие обновления помечаются как Expired, затем удаляются. 

    Возможно я что-то не понял, но после запуска скрипта и полной синхронизации с SUP, ничего не происходит

    Пример из моего SCCM.

    PS PT0:\> $UpdateTitle = 'CC-5.33.6162'
    ################################
    Import-Module "$env:SMS_ADMIN_UI_PATH\..\configurationmanager.psd1"
    $SiteCode = Get-PSDrive -PSProvider CMSITE
    Set-Location "$($SiteCode.Name):\"
    ####
    [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
    $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("localhost",$false,"8530");
    #############################
    
    $Update = , $wsus.SearchUpdates($UpdateTitle)
    $Update | ft -AutoSize Title, *Titles
    if ($Update.count -ne 1) {
        "Обновлений больше 1-го, точно фильтр верный? (y/n)"
        Read-Console $prompt
        if ($prompt -ne 'y') {exit}
    }
    
    $Update | ForEach-Object {
        $wsus.DeleteUpdate($_.Id.UpdateId.ToString())
        Write-Host $_.Title removed 
    }
    
    GAC    Version        Location                                                 
    ---    -------        --------                                                 
    True   v4.0.30319     C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.U...
    
    
    
    Title              CompanyTitles ProductTitles  ProductFamilyTitles
    -----              ------------- -------------  -------------------
    CCleaner 5.33.6162 {Patch My PC} {SCUP Updates} {}                 
    CCleaner 5.33.6162 {Patch My PC} {SCUP Updates} {}                 
    CCleaner 5.33.6162 {Patch My PC} {SCUP Updates} {}                 
    
    
    Cannot convert argument "updateId", with value: "System.Object[]", for "DeleteU
    pdate" to type "System.Guid": "Cannot convert value "System.Object[]" to type "
    System.Guid". Error: "Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxx
    x-xxxx-xxxx-xxxxxxxxxxxx).""
    At line:20 char:5
    +     $wsus.DeleteUpdate($_.Id.UpdateId.ToString())
    +     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], MethodException
        + FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument
     
    CCleaner 5.33.6162 CCleaner 5.33.6162 CCleaner 5.33.6162 removed
    
    

    9 апреля 2018 г. 13:54
  • мой косяк.

    исправленный скрипт:

    $UpdateTitle = "Acrobat 10.0"
    
    ################################
    Import-Module "$env:SMS_ADMIN_UI_PATH\..\configurationmanager.psd1"
    $SiteCode = Get-PSDrive -PSProvider CMSITE
    Set-Location "$($SiteCode.Name):\"
    ####
    [reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
    $wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer("localhost",$false,"8530");
    #############################
    
    $Update = @($wsus.SearchUpdates($UpdateTitle))
    $Update | ft -AutoSize Title, *Titles
    if ($Update.count -ge 1) {
        $p = Read-Host "Обновлений больше 1-го, точно фильтр верный? (y/n)"
        if ($p -ne 'y') {exit}
    }
    
    $Update | ForEach-Object {
        $wsus.DeleteUpdate($_.Id.UpdateId)
        Write-Host $_.Title removed 
    }

    >>устаревшие обновления помечаются как Expired, затем удаляются. 

    после того как в SCUP обновления помечаются как expired, надо обязательно делать Publish этих обновлений, потом уже и удалять можно.


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram

    9 апреля 2018 г. 15:19
    Модератор
  • >>устаревшие обновления помечаются как Expired, затем удаляются. 

    после того как в SCUP обновления помечаются как expired, надо обязательно делать Publish этих обновлений, потом уже и удалять можно.

    Так и делаю.

    Спасибо, скрипт отработал, всё удалилось!

    11 апреля 2018 г. 7:47
  • Так и делаю.


    Если говорить про методику - Я бы вообще не удалял ничего со SCUP, поскольку информаци о версиях и заменах одного патча (по) - другим, тоже довольно важна. + статистика со стороны SUP

    Если ситуация будет повторяться и чтобы попытаться разобраться надо иметь информацию о ID (Update ID в интерфейсе SCUP) обновления. Всё соответствие идёт именно по этому ID


    Грамотная постановка вопроса - уже 50% решения.
    SCCM User Group Russia на FaceBook и в Telegram

    11 апреля 2018 г. 8:14
    Модератор