Empirum API - Status eines Rechners abfragen

Moderator: moderators

Post Reply
_Stephan_
Posts: 3
Joined: 19. Mar 2024, 09:43
Contact:

Empirum API - Status eines Rechners abfragen

Post by _Stephan_ » 10. Nov 2025, 13:47

Guten Tag zusammen,

ich beschäftige mich seit kurzer Zeit vermehrt mit der Empirum API.

Ich würde gerne folgendes Szenario per Script abbilden:
Teil 1:
Prüfen ob alle Pakete, die einem Client über Konfigurationsgruppen und Zuweisungsgruppen (auch verschachtelte) zugewiesen sind auf Erfolgreich stehen. Einfach ausgedrückt ob der Client in Empirum "grün" ist, wenn ich auf Status klicke.

Teil 2:
Danach soll etwas mit dem Client passieren.

Teil2 habe ich gelöst. Bei Teil 1 tue ich mir noch schwer.

Von meinem Verständnis her würde ich es aktuell so bauen:
Da die Funktionen sehr spärlich sind, würde ich über

Code: Select all

$packages = Find-EmpirumPackage -Session $session -PackageType "Software"
mir alle Pakete holen, die es in Empirum gibt und dann für jedes dieser Pakete den Status des Clients zurückgeben lassen:

Code: Select all

$status = Get-EmpirumPackageState -Session $session -Package $package -TargetObject $computer
Sollte einer dieser Statii dann nicht "Finished" sein, wäre der Client nicht "grün".

Es kommt mir aber nur sehr umständlich vor, da wir seeehr viele Pakete in Empirum haben. Ich meine auch, dass ich nicht alle zugewiesenen Pakete habe (Stichwort verschachtelte Gruppen)
Hat jemand schonmal etwas ähnliches abgebildet?

_Stephan_
Posts: 3
Joined: 19. Mar 2024, 09:43
Contact:

Re: Empirum API - Status eines Rechners abfragen

Post by _Stephan_ » 13. Nov 2025, 16:09

Ich habe es nun so gelöst, dass ich mir über die DDC raussuche welche Pakete zugewiesen sind und nur diese Pakete auf den Status des betroffenen PCs prüfe.

User avatar
Frank Dethlefsen
Posts: 558
Joined: 06. Apr 2006, 22:01
Location: Bochum
Contact:

Re: Empirum API - Status eines Rechners abfragen

Post by Frank Dethlefsen » 16. Nov 2025, 17:19

Moin!

Meines Erachtens ist der Computer-Softwarepaket-Status nur mit EmpirumSDK-Bordmitteln nicht vernünftig abfragbar. Das mit der DDC-Datei ist smart.
Mich würde interessieren, wie Du nun den Softwarepaket-Status damit abfragst.
Der EmpirumSDK-Befehl Get-EmpirumPackageState kann nur ein Softwarepaket, das direkt in einer übergeordneten Gruppe oder dem Computer direkt zu gewiesen ist abfragen. Nach meinem Verständnis würde eine Abfrage nur auf dem Computer ein übergeordnetes Softwarepaket außer acht lassen.
Get-EmpirumPackageState -Session $Session -Package $Package -TargetObject $Group
Get-EmpirumPackageState -Session $Session -Package $Package -TargetObject $Computer
Frank Dethlefsen
Consultant und Coach
UPDATENOW GmbH
Frank.Dethlefsen@updatenow.de
https://empirum.blogspot.de/

_Stephan_
Posts: 3
Joined: 19. Mar 2024, 09:43
Contact:

Re: Empirum API - Status eines Rechners abfragen

Post by _Stephan_ » 18. Nov 2025, 12:49

Hi,

Get-EmpirumPackageState liefert zu jeglichem Softwarepaket einen Status zu einem Computer oder Gruppe zurück. Auch wenn es nicht zugewiesen ist. Dann ist der Status Unbekannt.

Daher war mein erster Ansatz alle Pakete aus Empirum zu nehmen und dann jedes dieser Pakete gegen den Computer zu prüfen. Das wäre aber sehr aufwendig. Auch von der benötigten Skriptzeit, da wir sehr viele Pakete haben.

Mein Ansatz nun ist folgender (in Pseudocode): Ich hole mir die DDC Datei zu einem Computernamen vom Share und lese diese ein um die tatsächlich zugewiesenen Pakete zu bekommen. Entweder über Gruppe oder direkt oder übergeordnete Gruppe. Alle landen ja in der DDC.

Dann durchlaufe ich die Zeilen der DDC und prüfe für jede Software, die darin steht, den Status über

Code: Select all

Get-EmpirumPackageState -session $session -Package {[PaketausDDC] -TargetObject $computername
Sollte eine Rückgabe nicht "Finished" sein , dann können nicht alle Pakete grün sein und ich verlasse die Schleife und gebe ein $false zurück.

Dies ist in abgespeckter Form mein Code aus meiner Funktion:

Code: Select all

$ddcPath = "\\[EMPIRUMSERVER]\configurator$\Values\MachineValues\[Domain]\$computername.ddc"

    $computer = $global:session.computers | Where-Object { $_.Name -eq $computername }

    $filecontent = Get-Content $ddcPath | Select-Object -Skip 5
    $success = $true

    foreach($line in $filecontent) {
        $temp = $line.Split(",")
        $packageparts=$temp[3].Split("\")
        $vendor = $packageparts[0].Trim()
        $product = $packageparts[1]
        $version = $packageparts[2]
        
        $tempPackage = $global:session.packages | Where-Object{ $_.SoftwareName -eq "$product" -and $_.Version -eq "$version" -and $_.Vendor -eq "$vendor"}

        $status = Get-EmpirumPackageState -Session $global:session -Package $tempPackage -TargetObject $computer

        if($status.ExecutionStatus -ne "Finished") {
                $success = $false
                break
        } 
    }    

return $success

Post Reply

Return to “Empirum SDK”

Who is online

Users browsing this forum: No registered users and 1 guest