Просто нужно разъяснение по поводу вывода этого кода. Вывод сценария при запуске по-прежнему говорит о том, что на серверах все еще остаются очень старые исправления, но мы уже убедились, что сервер уже исправлен.
ТРЕБОВАНИЯ
Модуль 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"
Просто нужно понять, что эти коды возвращают, так как сервер уже был перезапущен и до сих порвозвращает данные за июль и август.