Сканирование сервера, возвращающее данные исправления как очень старые и старые - PullRequest
0 голосов
/ 07 октября 2019

Просто нужно разъяснение по поводу вывода этого кода. Вывод сценария при запуске по-прежнему говорит о том, что на серверах все еще остаются очень старые исправления, но мы уже убедились, что сервер уже исправлен.

ТРЕБОВАНИЯ

  • Модуль Active Directory

  • WinRM включен на целевых машинах (для WMI)

  • Локальный администратор на целевых машинах

  • Примечание. Некоторые сканирования WMI не работают на всех операционных системах (особенно старых)

КРИТЕРИИ АУДИТА

  • Завершить обнаружениепроверка истории обновлений Windows

  • Соберите случайную выборку хорошего размера как с серверов, так и с компьютеров (убедитесь, что переименовываете выходной файл, чтобы избежать перезаписи)

  • Запишите любые предупреждения для «старых» или «очень старых» событий

    $Domain = $(get-addomain).dnsroot
    $Log = "C:\temp\Audit\$Domain Update History $(get-date -f yyyy-MM-dd).csv"

    $Computers = Get-ADComputer -Filter {OperatingSystem -LIKE "*server*" -AND Enabled -eq $TRUE} -Property Name  
    #$Computers = Get-ADComputer -Filter {OperatingSystem -NOTLIKE "*server*" -AND Enabled -eq $TRUE} -Property Name
    $Computers = Get-Random -InputObject $Computers -Count 100

    $obj=@()
    $Data = @()
    $Events = 10  # <- Events to collect per machine

    $Old = (get-date).AddDays(-14)
    $OldCount = 0
    $VeryOld = (get-date).AddDays(-30)
    $VeryOldCount = 0

    foreach ($Computer in $Computers.name) {

        if(!(Test-Connection -Cn $Computer -BufferSize 16 -Count 1 -ea 0 -quiet)){
            write-host "WARNING: $Computer not accessible" -f yellow
        }
        else {
            try{
                write-host "Working on $Computer"

                $Session = [activator]::CreateInstance([type]::GetTypeFromProgID("Microsoft.Update.Session",$Computer))
                $Searcher= $Session.CreateUpdateSearcher()
                $History = $Searcher.QueryHistory(0, $Events)

                $ComputerCount++

                Foreach($Entry in $History | ?{$_.Title -NOTLIKE "*Defender*"}) {
                    $obj = New-Object -TypeName PSObject
                    $obj | Add-Member -MemberType NoteProperty -Name "Computer" -Value $Computer
                    $obj | Add-Member -MemberType NoteProperty -Name "Date" -Value $Entry.Date
                    $obj | Add-Member -MemberType NoteProperty -Name "Description" -Value $Entry.Title

                    $EventCount++
                    if ($Entry.Date -le $VeryOld){
                        $obj | Add-Member -MemberType NoteProperty -Name "Age" -Value "Very Old"
                        $VeryOldCount++
                    }
                    elseif ($Entry.Date -le $Old){
                        $obj | Add-Member -MemberType NoteProperty -Name "Age" -Value "Old"
                        $OldCount++
                    }
                    else{
                        $obj | Add-Member -MemberType NoteProperty -Name "Age" -Value "Recent"
                        $RecentCount++
                    }

                    $Data += $obj
                }
            }
            catch{
                write-host "WARNING: $Computer not accessible" -foregroundcolor yellow
            }
        }
    }

    $Data | sort-object -property Computer,Date -descending | Export-Csv $Log -notype

    write-host ""
    write-host "There were $EventCount Windows Update events listed from $ComputerCount computers"
    write-host "$RecentCount events are recent"
    write-host "$OldCount events are old" -foregroundcolor yellow
    write-host "$VeryOldCount events are very old" -foregroundcolor red
    write-host ""
    write-host "Log Export Complete to $Log"

Просто нужно понять, что эти коды возвращают, так как сервер уже был перезапущен и до сих порвозвращает данные за июль и август.

1 Ответ

0 голосов
/ 07 октября 2019

Что делает ваш код:

Вы получаете 100 случайных серверов ($Computers = Get-Random -InputObject $Computers -Count 100) и запрашиваете их за последние 10 событий ($History = $Searcher.QueryHistory(0, $Events)). Если они не от Защитника, они разделены по возрасту: недавний, старый (14 дней) и очень старый (30 дней).

Очень старый означает, что на этих машинах было менее 10 событий за последний30 дней. Если вы получили 1 событие патча вчера, а остальные 30 дней, этот сервер будет считать 9 в $VeryOldCount. Но Сервер все еще может быть в курсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...