none
Поиск отсутствующих обновлений на серверах RRS feed

  • Вопрос

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

    В связи с тем, что Microsoft убил MBSA, приходится искать решения для обнаружения отсутствующих исправлений безопасности на серверах в ЛВС.

    На просторах сети предлагают использовать в качестве альтернативы скрипты. Только у меня с ними не складывается сканирование удаленных компьютеров. Привожу пример скрипта, помогите исправить:

    $SB = {
        $UpdateSession = New-Object -ComObject Microsoft.Update.Session  
        $UpdateServiceManager  = New-Object -ComObject Microsoft.Update.ServiceManager  
        $UpdateService = $UpdateServiceManager.AddScanPackageService("Offline Sync Service", "c:\ProgramData\WSUS Offline Catalog\wsusscn2.cab", 1)  
        $UpdateSearcher = $UpdateSession.CreateUpdateSearcher()   
        
        $UpdateSearcher.ServerSelection = 3
        $UpdateSearcher.IncludePotentiallySupersededUpdates = $true
        $UpdateSearcher.ServiceID = $UpdateService.ServiceID.ToString()  
        $SearchResult = $UpdateSearcher.Search("IsInstalled=0")
      
        $Updates = $SearchResult.Updates  
      
        $UpdateSummary = [PSCustomObject]@{
            ComputerName = $env:COMPUTERNAME    
            MissingUpdatesCount = $Updates.Count
            Vulnerabilities = $Updates | %{ $_.CveIDs }
            MissingUpdates = $Updates | Select Title, MsrcSeverity, @{Name="KBArticleIDs";Expression={$_.KBArticleIDs}}
        }
        Return $UpdateSummary
    }
    
    $Comps = "Server1","Server2","Server3"
    ForEach ($Comp in $Comps) {
        New-Item -Path "\\$Comp\c$\ProgramData\WSUS Offline Catalog" -Force -ItemType Directory | Out-Null
        Copy-Item -Path "\\FileServer\MBSA\wsusscn2.cab" -Destination "\\$Comp\c$\ProgramData\WSUS Offline Catalog" -Force
        Invoke-Command -ComputerName $Comp -ScriptBlock $SB
    }

    Скрипт-блок, если его выполнять непосредственно на локальном компьютере, отрабатывает нормально. Но при попытке выполнить его на удаленном ПК (через Invoke-Command) возникает ошибка доступа:

    Отказано в доступе. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED))

    Права на удаленные машины есть. Другие скрипты, использующие Invoke-Command, выполняются нормально без ошибок.

    P.S: WSUS есть, но всегда есть вероятность, что какие-то сервера по какой-то причине "не смогли с ним договориться". Поэтому, его отчеты, конечно, вещь хорошая, но хотелось бы иметь альтернативу.

    22 сентября 2020 г. 11:24

Все ответы

  • скорее всего вы натыкаетесь на проблему с double-hop

    как вариант создание политики которая создаст задачу по рассписанию (schedulled task) которая будет выполнять скрипт например раз в неделю и выгружать отчет в виде xml/json/csv на файловую шару, и вы уже будете анализировать эти файлы в те моменты времени когда вам это необходимо


    The opinion expressed by me is not an official position of Microsoft

    22 сентября 2020 г. 12:02
    Модератор
  • На double-hop поведение похоже, но вроде я к третьей стороне не обращаюсь. Специально .cab c сетевой шары копирую не в теле Invoke-Command. 

    Насчёт политики с шедулерной задачей я думал. Оставил этот вариант про запас, не хочется очередной костыль делать. 

    Надеялся, вдруг кто-нибудь знает как скрипт допилить. Может как-то можно обращаться к серверам напрямую с помощью классов работы с WU без Invoke-Command.

    22 сентября 2020 г. 15:08