поэтому у меня есть этот модуль PoshWSUS и скрипт, который запускается на WSUS и создает файл CSV. Я пытаюсь обновить его, чтобы он также содержал дата последнего патча столбец, но не могу понять это
Import-Module -name poshwsus -force
Import-module -name SysDBApi -force
Import-module -name EncryptedCredential -force -ErrorAction Stop
#получить учетные данные
$cred = Import-Clixml 'E:\WCO\transit.xml'
$SysDBcred = Import-Clixml 'E:\WCO\SysDBCred.xml'
$UseSSL = $Истина
$Порт = 8530
$Date = get-date - Формат дд-мм-гггг
$Time = get-date -формат ЧЧммсс
$Filename = "$($env:COMPUTERNAME)_$($Date)_$($Time)"
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | нулевой
Connect-PSWSUSServer -WsusServer $env:COMPUTERNAME -Port $Port
$ClientInfoHash = Get-PSWSUSClient |
Группа-Объект -Идентификатор свойства -AsHashTable -AsString
$UpdateScope = New-PSWSUSUpdateScope -UpdateApprovalActions Install -ExcludedInstallationStates NotApplicable
$Classifications = Get-PSWSUSClassification | Where-Object {$_.Title -eq "Обновления безопасности" }
$UpdateScope.Classifications.AddRange($Classifications)
$WsusData = Get-PSWSUSUpdateSummaryPerClient -UpdateScope $UpdateScope
$WsusData |
Select-Object @{name="Имя компьютера";Expression={($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2) | выберите -первый 1}},
@{name="Имя домена";Выражение={
if ( ($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2)[1])
{
($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2) | выберите -последний 1
}
еще
{
"РАБОЧАЯ ГРУППА"
}
}},
@{name="Customer";Expression={(Get-SysDBHost -Credentials $SysDBcred -ComputerName ( ($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2) | select -first 1)) .Покупатель}},
@{name="Последний зарегистрированный статус";Expression={$ClientInfoHash[$_.ComputerTargetID].LastReportedStatusTime}},
@{name="Необходимые обновления";expression={$_.needed}},
@{name="Total Updates";expression={($_.Installed+$_.Needed+$_.PendingReboot+$_.Failed)}},
@{name="% соответствия";expression={"$([math]::Round((($_.Installed / ($_.Installed+$_.Needed+$_.PendingReboot+$_.Failed)) * 100),0))%"}},
@{name="Операционная система";Expression={$ClientInfoHash[$_.ComputerTargetID].OSDescription}}|
Export-Csv -Path "E:\Reports\$($Filename)_UpdatesStatus.csv" -NoTypeInformation -Encoding "utf8" -Delimiter ";"
На другом сервере WSUS мы используем sqlcmd и SQL-запросы для получения этих данных, и часть, которая получает эту информацию, выглядит так:
ВЫБЕРИТЕ LIP.FullDomainName как «Имя сервера», LIP.GroupName как «Имя группы»,
LIP.CreationDate as 'Дата установки последнего исправления', CASE WHEN NUP.NumUPatches NULL THEN 0 ELSE NUP.NumUPatches END as 'Количество необходимых исправлений' FROM LATESTINSTPATCH LIP LEFT JOIN NumOfUNINSTPATCH NUP ON LIP.ComputerID=NUP.ComputerID
ЗАКАЗАТЬ ПО NUP.NumUPatches
Согласно с https://docs.microsoft.com/en-us/previous-versions/windows/desktop/bb410149(v=vs.85)
он есть в PUBLIC_VIEWS.vUpdate, а как с этим работать в PoshWSUS?