Рейтинг:0

PoshWSUS - как получить дату последнего исправления для каждого сервера?

флаг jp

поэтому у меня есть этот модуль 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?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.