Dynamische Gruppierung von Maschinen basierend auf dem Active Directory-Attribut „Verwaltet von“

Dynamische Gruppierung von Maschinen basierend auf dem Active Directory-Attribut „Verwaltet von“

Gemäß den Unternehmensrichtlinien muss jedem Server ein Administrator zugewiesen werden. Diese Information wird im Feld „Verwaltet von“ im Computerobjekt gespeichert.

Es wäre ziemlich nützlich, in SCOM eine dynamische Gruppe zu erstellen, die über dieses AD-Feld gefüllt wird. Und genau darin besteht mein Problem.

Schritte, die ich bisher ausprobiert habe.

1.Erstellen Sie für das Ziel Windows-Computer ein Attribut „Verwaltet von“. Dieses Attribut wird durch die WMI-Abfrage SELECT * FROM DS_computermit der Eigenschaft versehen DS_managedBy.

2. Erstellen Sie eine Gruppe mit einem dynamischen Filter.(Object is Windows-Computer_Extended AND (Managed by Equals usr) AND True)

Nun klingt das in der Theorie vernünftig, funktioniert aber offenbar überhaupt nicht.

Ist das, was ich zu schaffen versuche, tatsächlich möglich? Wie gehe ich dieses Problem an?

Antwort1

Nach einiger Recherche fand ich heraus, dass sich schon jemand mit diesem Problem befasst hatte. Irgendwie. Ich habeDasSkript. Ich habe die letzten paar Zeilen entfernt und die untenstehende Logik hinzugefügt, die ich brauchte. Es ist chaotisch, aber es funktioniert wie am Schnürchen. Sie müssen nur den Verwaltungsserver und den Einschluss-Regex ändern (wir haben mehrere Domänen, wollen diese Art der Automatisierung aber nur für eine).

<Functions from original script go here>

$ManagementServer = "<ManagementServerGoesHere>"

$ManagementGroup = GetSCOMManagementGroup -ms $ManagementServer
$Groups = Get-SCOMGroup -DisplayName "Managed-By *"
$Groups |% {
    $Group = $_
    $Group.DisplayName -match "Managed-By (\w{3})" | Out-Null
    $sAMAccountName = $Matches[1]
    $User = Get-ADUser -Filter {sAMAccountName -eq $sAMAccountName}
    $UserDN = $User.DistinguishedName
    $ADManagedByComputers = Get-ADComputer -Filter {ManagedBy -eq $UserDN}
    $SCOMManagedByComputer = Get-SCOMGroup $Group.id | Get-SCOMClassInstance
    [string]$InstancesToAdd = ""
    [string]$InstancesToRemove = ""

    $ADManagedByComputers | % {
        if($SCOMManagedByComputer.DisplayName -notcontains $_.DNSHostName) {
            $Agent = Get-SCOMAgent -DNSHostName $_.DNSHostName
            if($Agent) {
                Write-Host ($_.DNSHostName + " not in SCOM Group " + $Group.DisplayName) -ForegroundColor Yellow
                $InstancesToAdd = $InstancesToAdd + "," + $Agent.Id
             } else {
                Write-Host ($_.DNSHostName + " has no Agent installed!") -ForegroundColor Gray
             }
        } else {
            Write-Host ($_.DNSHostname + " already in SCOM Group " + $Group.DisplayName) -ForegroundColor Green
        }
    }

    $SCOMManagedByComputer | % {
        if($_.DisplayName -match "<InclusionRegex>") {
            if($ADManagedByComputers.DNSHostName -notcontains $_.DisplayName) {
                Write-Host ($_.DisplayName + " should not be in SCOM Group " + $Group.DisplayName) -ForegroundColor DarkYellow
                $Agent = Get-SCOMAgent -DNSHostName $_.DisplayName
                if($Agent) {
                    $InstancesToRemove = $InstancesToRemove + "," + $Agent.Id
                }
            }  
        } else {
            Write-Host ($_.DisplayName + " is not in the domain scope. Skipping.") -ForegroundColor Cyan
        }
    }

    $InstancesToAdd = $InstancesToAdd.Trim(",")
    $InstancesToRemove = $InstancesToRemove.Trim(",")


        $ManagementPackName = ($Group | Get-SCOMClass).ManagementPackName
        $ManagementPackID = (Get-SCManagementPack -Name $ManagementPackName)
        $MP = ValidateGroup -mg $ManagementGroup -mp $MP -groupID $Group.FullName
    If($InstancesToAdd -ne "" -and $InstancesToRemove -ne "") {
        $MP = UpdateGroup -mg $ManagementGroup -mp $ManagementPackID -groupID $Group.FullName -instancesToAdd $InstancesToAdd -instancesToRemove $InstancesToRemove
    }

    if($InstancesToAdd -ne "" -and $InstancesToRemove -eq "") {
        $MP = UpdateGroup -mg $ManagementGroup -mp $MP -groupID $Group.FullName -instancesToAdd $InstancesToAdd
    }

    if($InstancesToAdd -eq "" -and $InstancesToRemove -ne "") {
        $MP = UpdateGroup -mg $ManagementGroup -mp $MP -groupID $Group.FullName -instancesToRemove $InstancesToRemove
    }
}

verwandte Informationen