Detectando opções do site do AD usando o PowerShell

9

Como posso usar o PowerShell para encontrar opções de site do AD como +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED no PowerShell? Eu tenho brincado com o seguinte comando, mas não consigo cuspir nada de útil.

Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext' -Properties options
    
por MDMarra 02.10.2013 / 04:09

2 respostas

17

Editar # 3: Atualizando a documentação de referência.

Editar # 2: Editando mais uma vez porque escrevi algo no PS para fazer exatamente o que você está tentando fazer. Está no fundo.

Eu vou em frente e afirmo que não existe um modo (am) Amigável ao Powershell no momento. Mas é claro que você ainda pode usar o Powershell para tornar a consulta LDAP necessária para ver essas opções, se você realmente quiser. Confira o atributo options do objeto NTDS Settings de cada servidor associado a um site do AD:

Esseéoatributoexato,queéumbitmask,noqualorepadmin.exefunciona.Repadmin.execontémumtradutoramigáveldebitmaskemseucódigo.Comofazosnap-inADSIEditMMC.Noentanto,vocêprecisariarecriaressetradutordebitmasknoPowershell.

Porexemplo,Repadmin/options<DC>[{+|-}IS_GC]éumcomandoválidoeagorasabemosexatamenteemqualbiteleopera.

Aqui está o MSDN relativamente ruim. documentação sobre o atributo options .

Melhor documentação do MSDN sobre o atributo options

Options Attribute

A bitfield, where the meaning of the bits varies from objectClass to objectClass. Can occur on Inter-Site-Transport, NTDS-Connection, NTDS-DSA, NTDS-Site-Settings, and Site-Link objects.

E aqui está um exemplo de pesquisar por opções usando operadores de regras de correspondência da velha escola:

(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))

This filter uses the LDAP_MATCHING_RULE_BIT_AND matching rule operator (1.2.840.113556.1.4.803) to find nTDSDSA objects that have the low-order bit set in the bitmask of the options attribute. The low-order bit, which corresponds to the NTDSDSA_OPT_IS_GC constant defined in Ntdsapi.h, identifies the nTDSDSA object of a Global Catalog server. For more information about matching rules, see Search Filter Syntax.

Oh garoto, isso soa divertido!

Alguns outros valores para a máscara de bits:

Então,comisso,vocêdeveterinformaçõessuficientespararolarseupróprioGet-ADSiteOptionsCmdlet...sequiserqueeuescrevaumaparavocê,porumataxamuitomodesta...;)

Editar:aquiestáolinkdaMicrosoft, Repadmin for Experts , que detalha a diferença entre os subcomandos options e siteoptions de repadmin:

By using the siteoptions subcommand, we could change the options attribute stored on the NTDS Site Settings Object.

Como para esse bitmap? É mesmo documentado? Não tenho certeza. Se você pode me dizer o que significa FORCE_KCC_WHISTLER_BEHAVIOR em uma entrevista, eu vou contratá-lo no local. Você é um show, MDMarra. ;)

Portanto, apenas para resumir, o atributo options no objeto CN=NTDS Settings para cada controlador de domínio corresponde às opções específicas do DC, ou seja, repadmin <DC> /options , enquanto o atributo options no objeto CN=NTDS Site Settings sob cada site corresponde a repadmin /siteoptions .

Então, para finalmente responder sua pergunta. Obtendo especificamente opções de site, não opções de DC:

ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext)) 
{ 
    Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options 
}

Se não houver opções de site definidas, o Powershell não as devolverá. Você provavelmente poderia simplificar um pouco o código acima, mas está usando o jargão com o qual você começou. Depois de pesquisar demais, finalmente encontrei a documentação na máscara de bits das opções do site :

Portanto,paraIS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDquevocêforneceucomoexemplo,vocêestariaprocurandoumvalorde0x00000010paraoatributooptions.

E da execução do snippet Powershell:

Editar#2:Euescreviumacoisaparavocêhoje:

#Require-Version3#Require-ModuleActiveDirectoryFunctionGet-ADSiteOptions{<#.SYNOPSISThisCmdletgetsActiveDirectorySiteOptions..DESCRIPTIONThisCmdletgetsActiveDirectorySiteOptions.Wecanfillouttherestofthiscomment-basedhelplater..LINKhttp://myotherpcisacloud.com.NOTESWrittenbyRyanRies,[email protected].#>[CmdletBinding()]Param()BEGIN{Set-StrictMode-VersionLatest#ThisenumcomesfromNtDsAPI.hintheWindowsSDK.#AlsothankstoJasonScottforpointingitouttome.http://serverfault.com/users/23067/jscottAdd-Type-TypeDefinition@" 
                                   [System.Flags]
                                   public enum nTDSSiteSettingsFlags {
                                   NTDSSETTINGS_OPT_IS_AUTO_TOPOLOGY_DISABLED            = 0x00000001,
                                   NTDSSETTINGS_OPT_IS_TOPL_CLEANUP_DISABLED             = 0x00000002,
                                   NTDSSETTINGS_OPT_IS_TOPL_MIN_HOPS_DISABLED            = 0x00000004,
                                   NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED        = 0x00000008,
                                   NTDSSETTINGS_OPT_IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED = 0x00000010,
                                   NTDSSETTINGS_OPT_IS_GROUP_CACHING_ENABLED             = 0x00000020,
                                   NTDSSETTINGS_OPT_FORCE_KCC_WHISTLER_BEHAVIOR          = 0x00000040,
                                   NTDSSETTINGS_OPT_FORCE_KCC_W2K_ELECTION               = 0x00000080,
                                   NTDSSETTINGS_OPT_IS_RAND_BH_SELECTION_DISABLED        = 0x00000100,
                                   NTDSSETTINGS_OPT_IS_SCHEDULE_HASHING_ENABLED          = 0x00000200,
                                   NTDSSETTINGS_OPT_IS_REDUNDANT_SERVER_TOPOLOGY_ENABLED = 0x00000400,
                                   NTDSSETTINGS_OPT_W2K3_IGNORE_SCHEDULES                = 0x00000800,
                                   NTDSSETTINGS_OPT_W2K3_BRIDGES_REQUIRED                = 0x00001000  }
"@
        ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext)) 
        {            
            $SiteSettings = Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
            If(!$SiteSettings.PSObject.Properties.Match('Options').Count -OR $SiteSettings.Options -EQ 0)
            {
                # I went with '(none)' here to give it a more classic repadmin.exe feel.
                # You could also go with $Null, or omit the property altogether for a more modern, Powershell feel.
                [PSCustomObject]@{SiteName=$Site.Name; DistinguishedName=$Site.DistinguishedName; SiteOptions='(none)'} 
            }
            Else
            {
                [PSCustomObject]@{SiteName=$Site.Name; DistinguishedName=$Site.DistinguishedName; SiteOptions=[Enum]::Parse('nTDSSiteSettingsFlags', $SiteSettings.Options)}
            }
        }
    }
}

E aqui está em ação:

    
por 02.10.2013 / 06:11
3

A documentação mencionada por Ryan omite 2 NTDSettings Opções necessárias para suportar todas as combinações. Encontre abaixo os valores encontrados em ntdsapi.h :

Add-Type -TypeDefinition @"
    [System.Flags]
    public enum nTDSSiteSettingsFlags {
    NTDSSETTINGS_OPT_IS_AUTO_TOPOLOGY_DISABLED = 0x00000001,
    NTDSSETTINGS_OPT_IS_TOPL_CLEANUP_DISABLED = 0x00000002,
    NTDSSETTINGS_OPT_IS_TOPL_MIN_HOPS_DISABLED = 0x00000004,
    NTDSSETTINGS_OPT_IS_TOPL_DETECT_STALE_DISABLED = 0x00000008,
    NTDSSETTINGS_OPT_IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED = 0x00000010,
    NTDSSETTINGS_OPT_IS_GROUP_CACHING_ENABLED = 0x00000020,
    NTDSSETTINGS_OPT_FORCE_KCC_WHISTLER_BEHAVIOR = 0x00000040,
    NTDSSETTINGS_OPT_FORCE_KCC_W2K_ELECTIONn = 0x00000080,
    NTDSSETTINGS_OPT_IS_RAND_BH_SELECTION_DISABLED = 0x00000100,
    NTDSSETTINGS_OPT_IS_SCHEDULE_HASHING_ENABLED = 0x00000200,
    NTDSSETTINGS_OPT_IS_REDUNDANT_SERVER_TOPOLOGY_ENABLED = 0x00000400,
    NTDSSETTINGS_OPT_W2K3_IGNORE_SCHEDULES = 0x00000800,
    NTDSSETTINGS_OPT_W2K3_BRIDGES_REQUIRED = 0x00001000
    }
"@

e

SiteOptions=[Enum]::Parse('nTDSSiteSettingsFlags', $SiteSettings.Options)

pode ser simplificado por

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options
    
por 28.05.2014 / 17:25