Ermitteln der Computer in 'Nicht zugeordnete Computer'

Moderator: moderators

Post Reply
RBiebach
Posts: 13
Joined: 16. Jan 2007, 16:23
Contact:

Ermitteln der Computer in 'Nicht zugeordnete Computer'

Post by RBiebach » 04. Mar 2024, 13:58

Hallo Gemeinde,

ich benötige mal eure Hilfe. Ich versuche gerade zu ermitteln, welche Computer sich in besagtem Filter befinden. 1. Ansatz: Ermitteln, ob ein Computer in einer Gruppe ist. Leider ermittelt der Befehl Find-EmpirumGroup mit -HasMember eine Gruppe. Mit der kann man zwar nichts anfangen, aber die Abfrage, ob KEINE Gruppe gefunden wurde, geht so in die Hose.
Hier mal das Script:

$Computername = "TEST-004"

### Verbinden mit der Empirum-API ###
# Aufruf der Verbindung
$EmpApiSession = Open-Matrix42ServiceConnection -ServerName $ServerName -Port $Port -UserName $APIUserName -EncryptedPassword $APIPassword

# Bei Verbindungsfehler Abbruch mit Fehlermeldung
if($EmpApiSession -eq $null)
{
Write-Error "Verbindung zur Empirumsitzung fehlgeschlagen!"
exit 5
}

Write-Output "."
Write-Output "Verbindung zur Empirumsitzung erfolgreich."
Write-Output "."

#Computer suchen
$ComputerObj = $EmpApiSession.Computers | where Name -eq $ComputerName
If ($ComputerObj)
{
Write-Host "$($ComputerObj.Name) in Empirum"
#Alle Gruppen mit dem ComputerObj suchen
$CompGroups = $false
$CompGroups = Find-EmpirumGroup -HasMember $ComputerObj -Session $EmpApiSession
$CompGroups.Expression

If ($CompGroups -eq $false)
{
Write-Host "Keine Gruppe gefunden"
}
Else
{
Write-Host "Computer Gruppen wurden ermittelt"
Foreach ($Group in $CompGroups)
{
#Prüfen, ob KonfigGrp
$CurCompGroup = $empApiSession.Groups | where ID -eq $Group.ID
If ($CurCompGroup.GroupType -eq "ConfigurationGroup")
{
Write-Host "Gruppenname: $($Group.Name)"
}
Else
{
Write-Host "$($Group.Name) keine Konfigurationsgruppe"
}
}
}
}
Else
{
Write-Host "Computer $Computername nicht in Empirum"
}


Hier das Ergebnis der Powershell:

Verbindung zur Empirumsitzung erfolgreich.
.
TEST-004 in Empirum

Computer Gruppen wurden ermittelt
Type NodeType Value CanReduce
---- -------- ----- ---------
System.Linq.EnumerableQuery`1[Matrix42.SDK.Contracts.Models.IEmpirumGroup] Constant {} False
Close Empirumsession
AUSFÜHRLICH: Close-Matrix42ServiceConnection completed successfully

Also wurde also mindestens eine Gruppe ermittelt, man kann sich auch per $CompGroups.Expression was anzeigen lassen. Aber leider funktioniert sonst nichts, z.B. count.

Hat einer eine Idee. Per SQL ist das kein Problem, ich will aber kein SQL einsetzen.

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

Re: Ermitteln der Computer in 'Nicht zugeordnete Computer'

Post by Frank Dethlefsen » 05. Mar 2024, 08:58

Moin,

ich hatte das Problem auch schon. Ist irgendwie nicht sauber programmiert. Ich konnte das dann so lösen. Siehe .ID

$CompGroups = Find-EmpirumGroup -HasMember $ComputerObj -Session $EmpApiSession
If ($CompGroups.ID)
{
Write-Host "Gruppe gefunden!"
}
Else
{
Write-Host "Keine Gruppe gefunden!"
}
:roll:
Frank Dethlefsen
Consultant und Coach
UPDATENOW GmbH
Frank.Dethlefsen@updatenow.de
https://empirum.blogspot.de/

RBiebach
Posts: 13
Joined: 16. Jan 2007, 16:23
Contact:

Re: Ermitteln der Computer in 'Nicht zugeordnete Computer'

Post by RBiebach » 21. Mar 2024, 11:44

Hallo Herr Dethlefsen,

danke für die Antwort. Mein Kollege und ich haben auch weitergeforscht und sind zu folgendem Skript gekommen. Bei uns stimmen die Angaben. Das Skript braucht bei uns mit etwas mehr als 9000 Rechnern ungefähr 3 Minuten

Code: Select all

#Alle Computer suchen
$ComputerObj = $EmpApiSession.Computers
If ($ComputerObj)
{
    foreach ($Comp in $ComputerObj)
    {
        #Alle Gruppen mit dem Conputerobj suchen
        $CompGroups = Find-EmpirumGroup -HasMember $Comp -Session $EmpApiSession | Where-Object {$_.GroupType -eq "ConfigurationGroup" -or $_.GroupType -eq "AssignmentGroup"}
    
        If (!($CompGroups))
        {
            #Keine Gruppe gefunden
            Write-Host "$($Comp.Name) in Empirum aber ohne Zuweisung"
            # hier weitere Verarbeitung
        }
    }
}
Grüße
Ralf

Nachtrag: Mit der Abfrage auf ID läuft das Skript schneller, bei uns ca. 1:45 Minuten

Post Reply

Return to “Empirum SDK”

Who is online

Users browsing this forum: No registered users and 0 guests