Agrupamento dinâmico de máquinas com base no atributo "Gerenciado por" do Active Directory

7

A política da empresa exige que todo servidor tenha um administrador designado. Essas informações estão sendo salvas no campo "Gerenciado por" no objeto Computador.

Seria bastante útil criar um grupo dinâmico no SCOM que está sendo preenchido através deste campo do AD. E aí está o meu problema.

Passos que tentei longe.

1.Crie um atributo "Gerenciado por" para o destino Computador Windows. Este atributo está sendo pela consulta WMI SELECT * FROM DS_computercom a propriedade DS_managedBy.

2.Crie um grupo com um filtro dinâmico. (Object is Windows-Computer_Extended AND (Managed by Equals usr) AND True)

Agora, isso parece razoável em teoria, mas aparentemente não funciona.

Isso é realmente possível o que estou tentando criar? Como estou lidando com esse problema?

Fada
fonte
11
Isso me parece o tipo de coisa que você terá que criar, por exemplo, no Powershell, e depois executar esse script regularmente como uma tarefa agendada.
Ryan Ries
@RyanRies Hm, eu nunca pensei sobre isso. Vou ver o que posso fazer e, eventualmente, postar um script, se for bem-sucedido.
Fada

Respostas:

2

Depois de algumas pesquisas, descobri que alguém já havia enfrentado esse problema. Tipo de. Eu modifiquei este script. Livrei-me das duas últimas linhas e adicionei a lógica abaixo que eu precisava. É uma bagunça, mas funciona como um encanto. Tudo o que você precisa alterar é o servidor de gerenciamento e o regex de inclusão (temos vários domínios, mas queremos apenas esse tipo de automação para um).

<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
    }
}
Fada
fonte