sunnyrainyday
Goto Top

Update Infos per Powershell Remote abrufen

Moin zusammen,

ich möchte Remote mit PS den Status, in erster Linie ob eine Fehler beim Update aufgetreten sind, abfragen. Hab was im Netzt gefunden aber funktioniert nicht so wie gewollt. Ich erhalte beim Ausführen den Fehler: Die Benennung "ECodeToName" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Hier scheint Invoke-Command nur die Funktion GetUpdateInfo einzubeziehen....was auch im Scriptblock ersichtlich ist. Wie kann ich nun das Skript dazu bringen die Infos einzuholen?
Sieht hier jemand den Fehler oder hat eine einfachere bzw. bessere Lösung?

Vielen Dank!

function ECodeToName
{
param(
        [Parameter(Mandatory=$true)]
        [int] $ResultCode)

    $Result = $ResultCode
    switch($ResultCode)
    {
      2 {
        $Result = "Succeeded"  
      }
      3 {
        $Result = "Succeeded With Errors"  
      }
      4 {
        $Result = "Failed"  
      }
      }

    return $Result
}

        function GetUpdateInfo
        {
        
        $session = (New-Object -ComObject 'Microsoft.Update.Session')  

        $history = $session.QueryHistory("",0,50) | ForEach-Object {  
        $Result = ECodeToName -ResultCode $_.ResultCode

     
        $_ | Add-Member -MemberType NoteProperty -Value $Result -Name Result
        $Product = $_.Categories | Where-Object {$_.Type -eq 'Product'} | Select-Object -First 1 -ExpandProperty Name  
        $_ | Add-Member -MemberType NoteProperty -Value $_.UpdateIdentity.UpdateId -Name UpdateId
        $_ | Add-Member -MemberType NoteProperty -Value $_.UpdateIdentity.RevisionNumber -Name RevisionNumber
        $_ | Add-Member -MemberType NoteProperty -Value $Product -Name Product -PassThru
        Write-Output $_
        }
        
        $history | Where-Object {![String]::IsNullOrWhiteSpace($_.title)} |
        Select-Object Result, Date, Title, SupportUrl, Product, UpdateId, RevisionNumber
        


        $Logpath = "C:\Users\Administrator\Documents\" + $Server + "_" + $result + ".txt"  
        #GetUpdateInfo | Out-File -FilePath $Logpath -Append

}
    
        Invoke-Command -ScriptBlock ${function:GetUpdateInfo} -ComputerName srv2019_3 -Credential contoso\administrator | Format-Table > $Logpath

Content-ID: 1482522990

Url: https://administrator.de/contentid/1482522990

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

149569
Lösung 149569 08.11.2021 um 14:41:02 Uhr
Goto Top
Invoke-Command -ComputerName srv2019_3 -Credential contoso\administrator -ScriptBlock {
    (new-object -ComObject "Microsoft.Update.Session").QueryHistory("",0,50) | ?{$_.ResultCode -in 3,4} | select Date,Title,@{n='Result';e={switch($_.ResultCode){2{"Succeeded"}3{"Succeeded with errors"}4{"Failed"}}}}  
}
SunnyRainyDay
SunnyRainyDay 08.11.2021 um 16:23:06 Uhr
Goto Top
Vielen Dank hacktor.
Okaaaayy...zweizeiler geht auch :D
Dennoch bekomme ich ne Fehlermeldung:

Invoke-Command : Fehlendes Argument für den Parameter "ScriptBlock". Geben Sie einen Parameter vom Typ "System.Management.Automation.ScriptBlock" an, und versuchen Sie es erneut.  
In Zeile:1 Zeichen:74
+ ... ComputerName srv2019_3 -Credential contoso\administrator -ScriptBlock
+                                                              ~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Command], ParameterBindingException
    + FullyQualifiedErrorId : MissingArgument,Microsoft.PowerShell.Commands.InvokeCommandCommand

Bin mir nicht sicher ob´s damit zusammenhängt. In meinem Code gabs auch einen Fehler im QueryHistory("",0,50)
Egal welche Werte ich angebe bekomme den nicht weg.

Danke!
149569
149569 08.11.2021 aktualisiert um 16:56:13 Uhr
Goto Top
Zitat von @SunnyRainyDay:
Dennoch bekomme ich ne Fehlermeldung:
Du hast den Code falsch kopiert oder falsch angepasst ... Mein Code hat nämlich einen Skriptblock, siehst du an der öffnenden und schließenden geschweiften Klammer und die fehlt bei dir, sieht man in der Fehlermeldung!! Die geöffnete geschweifte Klammer muss hier zwingend in der selben Zeile anfangen, dort darf kein Zeilenumbruch davor sein.

Code funktioniert hier im Test auch einwandfrei.
Bin mir nicht sicher ob´s damit zusammenhängt. In meinem Code gabs auch einen Fehler im QueryHistory("",0,50)
Nein, das hat mit der Fehlermeldung überhaupt nichts zu tun, läuft hier auf einem Server 2022 im Test ohne Probleme.

Grundlagen zur Powershell bitte hier durchlesen
Powershell Leitfaden für Anfänger

Zur Info, das Skript gibt nur etwas aus wenn es auch fehlgeschlagene Updates auf diesem Server gibt!
SunnyRainyDay
SunnyRainyDay 08.11.2021 um 16:50:06 Uhr
Goto Top
Ok...stimmt. Vielen Dank. Hat geklapptface-smile Und danke für den Link...werde ich mir gerne antun face-smile