Rilevamento delle opzioni del sito AD tramite PowerShell


9

Come posso usare PowerShell per trovare le opzioni del sito AD come +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDin PowerShell? Ho giocato con il seguente comando, ma non riesco a sputare qualcosa di utile.

Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext` -Properties options

Risposte:


17

Modifica n. 3: aggiornamento della documentazione di riferimento.

Modifica n. 2: modifica ancora una volta perché ho scritto qualcosa in PS per fare esattamente quello che stai cercando di fare. È in fondo.

Ho intenzione di andare avanti e affermare che al momento non esiste un modo Powershell Friendly (tm) di farlo. Ma ovviamente potresti comunque usare Powershell per rendere la query LDAP necessaria per vedere queste opzioni se lo desideri davvero. Controlla l' optionsattributo NTDS Settingsdell'oggetto di ciascun server associato a un sito AD:

inserisci qui la descrizione dell'immagine

Questo è l'attributo esatto, che è una maschera di bit, su cui funziona repadmin.exe. Repadmin.exe contiene un traduttore di bitmask amichevole nel suo codice. Come lo snap-in MMC ADSIEdit. Tuttavia, è necessario ricreare quel traduttore maschera di bit in Powershell.

Ad esempio, Repadmin /options <DC> [{+|-} IS_GC]è un comando valido e ora sappiamo esattamente quale bit su cui opera.

Ecco la documentazione MSDN relativamente scadente sull'attributo options.

Migliore documentazione MSDN sull'attributo options.

Attributo Opzioni

Un campo di bit, in cui il significato dei bit varia da objectClass a objectClass. Può verificarsi su oggetti Inter-Site-Transport, NTDS-Connection, NTDS-DSA, NTDS-Site-Settings e Site-Link.

Ed ecco un esempio di ricerca di opzioni usando gli operatori delle regole di abbinamento della vecchia scuola:

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

Questo filtro utilizza l'operatore di regole di corrispondenza LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) per trovare oggetti nTDSDSA che hanno il bit di ordine inferiore impostato nella maschera di bit dell'attributo opzioni. Il bit di ordine basso, che corrisponde alla costante NTDSDSA_OPT_IS_GC definita in Ntdsapi.h, identifica l'oggetto nTDSDSA di un server del catalogo globale. Per ulteriori informazioni sulle regole di corrispondenza, vedere Sintassi del filtro di ricerca.

Oh ragazzo, sembra divertente!

Alcuni altri valori per la maschera di bit:

inserisci qui la descrizione dell'immagine

Quindi con quello dovresti avere abbastanza informazioni per girare il tuo Get-ADSiteOptionsCmdlet ... se vuoi che ne scriva uno per te lo farò, per un costo molto modesto ...;)

Modifica: ecco il collegamento Microsoft, Repadmin per esperti , che descrive in dettaglio la differenza tra i sottocomandi optionse i siteoptionssottocomandi di repadmin:

Utilizzando il sottocomando siteoptions, è possibile modificare l'attributo delle opzioni memorizzato nell'oggetto Impostazioni sito NTDS.

Per quanto riguarda quella bitmap? È persino documentato? Non sono sicuro. Se puoi dirmi cosa FORCE_KCC_WHISTLER_BEHAVIORsignifica in un'intervista, ti assumerò sul posto. Sei un tale showoff, MDMarra. ;)

Quindi, per riassumere, l' optionsattributo CN=NTDS Settingssull'oggetto per ciascun controller di dominio corrisponde alle opzioni specifiche del controller di dominio, vale a dire repadmin <DC> /options, mentre l' optionsattributo CN=NTDS Site Settingssull'oggetto sotto ciascun sito corrisponde repadmin /siteoptions.

Quindi, per rispondere finalmente alla tua domanda. Ottenere in particolare le opzioni del sito, non le opzioni 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 non ci sono opzioni del sito impostate, Powershell non le restituirà. Probabilmente potresti semplificare un po 'il codice sopra ma sta usando il linguaggio con cui hai iniziato. Dopo troppe ricerche, ho finalmente trovato la documentazione sulla maschera di bit delle opzioni del sito :

Opzioni del sito Maschera di bit

Quindi, per IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDquello che hai dato come esempio, dovresti cercare un valore 0x00000010per l' optionsattributo.

inserisci qui la descrizione dell'immagine

E dall'esecuzione dello snippet Powershell:

Opzioni del sito con Powershell


Modifica n. 2: ti ho scritto qualcosa oggi:

#Require -Version 3
#Require -Module ActiveDirectory
Function Get-ADSiteOptions
{
<#
.SYNOPSIS
    This Cmdlet gets Active Directory Site Options.
.DESCRIPTION
    This Cmdlet gets Active Directory Site Options.
    We can fill out the rest of this comment-based help later.
.LINK
    http://myotherpcisacloud.com
.NOTES
    Written by Ryan Ries, October 2013. ryanries09@gmail.com.
#>
    [CmdletBinding()]
    Param()
    BEGIN
    {
        Set-StrictMode -Version Latest

        # This enum comes from NtDsAPI.h in the Windows SDK.
        # Also thanks to Jason Scott for pointing it out to me. http://serverfault.com/users/23067/jscott
        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_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)}
            }
        }
    }
}

Ed eccolo in azione:

Get-ADSiteOptions


Un post fantastico!
Simon Catlin,

1
Whistler era il nome in codice per l'era dei sistemi operativi XP / 2003. Presumo FORCE_KCC_WHISTLER_BEHAVIORcostringerà le versioni successive del KCC a utilizzare solo opzioni e algoritmi dell'era 2003. Per quanto riguarda il resto del tuo post, l'ho pensato. Grazie per la conferma.
MDMarra,

4
Ri: modifica # 2 - Mi vuoi sposare?
MDMarra,

È un bromance stellato.
Ryan Ries,

3

La documentazione menzionata da Ryan omette 2 Opzioni NTDSettings necessarie per supportare tutte le combinazioni. Di seguito sono riportati i valori trovati in 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)

può essere semplificato da

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

Grazie per le informazioni aggiuntive. L'ho incorporato nella mia sceneggiatura.
Ryan Ries,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.