deci am acest modul PoshWSUS și un script care rulează pe WSUS și face un fișier CSV. Încerc să-l actualizez astfel încât să conțină și el data ultimului patch coloană, dar întâmpinați probleme în a înțelege
Import-Module -name poshwsus -force
Import-modul -nume SysDBApi -force
Import-module -name EncryptedCredential -force -ErrorAction Stop
#obține acreditări
$cred = Import-Clixml „E:\WCO\transit.xml”
$SysDBcred = Import-Clixml „E:\WCO\SysDBCred.xml”
$UseSSL = $True
$Port = 8530
$Date = get-date -Format zz-LL-aaaa
$Time = get-date -format HHmmss
$Filename = „$($env:COMPUTERNAME)_$($Date)_$($Time)”
[reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration") | out-null
Connect-PSWSUSServer -WsusServer $env:COMPUTERNAME -Port $Port
$ClientInfoHash = Get-PSWSUSClient |
Group-Object -Property Id -AsHashTable -AsString
$UpdateScope = New-PSWSUSUpdateScope -UpdateApprovalActions Instalare -ExcludedInstallationStates NotApplicable
$Classifications = Get-PSWSUSClassification | Unde-Object {$_.Title -eq „Actualizări de securitate” }
$UpdateScope.Classifications.AddRange($Classifications)
$WsusData = Get-PSWSUSUpdateSummaryPerClient -UpdateScope $UpdateScope
$WsusData |
Select-Object @{name="Nume computer";Expresie={($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2) | selectați -primul 1}},
@{name="Nume domeniu";Expresie={
if ( ($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2)[1])
{
($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2) | selectați -ultimul 1
}
altfel
{
„GRUP DE LUCRU”
}
}},
@{name="Customer";Expression={(Get-SysDBHost -Credentials $SysDBcred -ComputerName ( ($ClientInfoHash[$_.ComputerTargetID].FullDomainName).split(".",2) | selectați -primul 1)) .Client}},
@{name="Ultima stare raportată";Expresie={$ClientInfoHash[$_.ComputerTargetID].LastReportedStatusTime}},
@{name="Actualizări necesare";expression={$_.needed}},
@{name="Total Updates";expression={($_.Installed+$_.Needed+$_.PendingReboot+$_.Failed)}},
@{name="% Of Compliance";expression={"$([math]::Round((($_.Instalat / ($_.Instalat+$_.Necesar+$_.PendingReboot+$_.Failed)) * 100),0))%"}},
@{name="Sistem de operare";Expression={$ClientInfoHash[$_.ComputerTargetID].OSDescription}}|
Export-Csv -Calea "E:\Rapoarte\$($Filename)_UpdatesStatus.csv" -NoTypeInformation -Encoding "utf8" -Delimiter ";"
Pe un alt server WSUS folosim interogări sqlcmd și SQL pentru a obține aceste date, iar partea care primește aceste informații arată astfel:
SELECTAȚI LIP.FullDomainName ca „Nume server”, LIP.GroupName ca „Nume grup”,
LIP.CreationDate ca „Cea mai recentă dată de instalare a patch-urilor”, CASE WHEN NUP.NumUPatches este NULL THEN 0 ELSE NUP.NumUPatches END ca „Numărul de corecții necesare” FROM LATETINSTPATCH LIP LEFT JOIN NumOfUNINSTPATCH NUP ON LIP.NumUPatches=ComputerIDNUP.ComputerID=
COMANDĂ DE NUP.NumUPatches
Conform https://docs.microsoft.com/en-us/previous-versions/windows/desktop/bb410149(v=vs.85)
este în PUBLIC_VIEWS.vUpdate, dar cum să lucrezi cu asta în PoshWSUS?