Ermitteln der Computer in 'Nicht zugeordnete Computer'
Posted: 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.
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.