9 votos

La detección de Sitio de ANUNCIOS de las opciones de uso de PowerShell

¿Cómo puedo usar PowerShell para encontrar el sitio de ANUNCIOS opciones como por ejemplo +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED en PowerShell? He estado jugando con el siguiente comando, pero no puede conseguir que a escupir todo lo útil.

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

17voto

Ryan Ries Puntos 33449

Edición #2: Edición una vez más porque escribí algo en PS para hacer exactamente lo que usted está tratando de hacer. Es en la parte inferior.

Voy a seguir adelante y afirmar que no hay Powershell Amable (tm) forma de hacerlo en la actualidad. Pero, por supuesto, usted todavía puede utilizar Powershell para realizar la consulta LDAP es necesario para ver estas opciones si realmente quería. Echa un vistazo a la options atributo de la NTDS Settings objeto de cada servidor que está asociado a un sitio de ANUNCIOS:

enter image description here

Que es exactamente el atributo, que es una máscara de bits, que repadmin.exe obras. Repadmin.exe contiene un amistoso máscara de bits traductor en su código. Como lo hace el ADSIEdit MMC snap-in. Sin embargo, sería necesario para recrear la máscara de bits traductor en Powershell.

Por ejemplo, Repadmin /options <DC> [{+|-} IS_GC] es un comando válido, y ahora sabemos exactamente qué bits en los que opera.

Aquí es relativamente mierda documentación de MSDN en la options de atributo.

Opciones De Atributo

Un campo de bits, donde el significado de los bits varía de objectClass a objectClass. Puede ocurrir en Inter-Sitio-el Transporte, la NTDS-Conexión, NTDS-DSA, NTDS-Sitio-Configuración y de Vínculo de Sitio los objetos.

Y aquí está un ejemplo de la búsqueda de opciones de uso de la vieja escuela regla de coincidencia de los operadores:

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

Este filtro utiliza la LDAP_MATCHING_RULE_BIT_AND regla de coincidencia de operador (1.2.840.113556.1.4.803) para encontrar nTDSDSA objetos que tienen el bit de orden inferior establecido en la máscara de bits de las opciones de atributo. El bit de orden inferior, que corresponde a la NTDSDSA_OPT_IS_GC constante definida en Ntdsapi.h, identifica el nTDSDSA objeto de un servidor de Catálogo Global. Para obtener más información acerca de las reglas de coincidencia, consulte Filtro de Búsqueda de Sintaxis.

Oh boy hace que el sonido de la diversión!

Algunos otros valores de la máscara de bits:

enter image description here

Así que con eso usted debe tener suficiente información para rodar sus propios Get-ADSiteOptions Cmdlet... si me quieres escribir uno para que yo, por una módica tarifa... ;)

Edit: Aquí está el link de Microsoft, Repadmin para los Expertos, la cual se detalla la diferencia entre el options y siteoptions subcomandos de repadmin:

Mediante el uso de la siteoptions subcomando, podemos cambiar las opciones de atributo almacenado en el Objeto de Configuración NTDS Site.

Como para que el mapa de bits? Es incluso documentado? No estoy seguro. Si usted me puede decir lo FORCE_KCC_WHISTLER_BEHAVIOR significa que en una entrevista, voy a contratar a usted en el lugar. Eres haga el fanfarrón, MDMarra. ;)

Así que para resumir, el options de atributo en la CN=NTDS Settings objeto de cada controlador de dominio corresponde a la DC opciones específicas, es decir, repadmin <DC> /options, mientras que el options de atributo en la CN=NTDS Site Settings objeto en cada sitio corresponde a repadmin /siteoptions.

Así, para finalmente responder a su pregunta. Llegar específicamente opciones de sitio, no DC opciones:

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

Si no hay sitio opciones de set, Powershell no retorno. Probablemente se podría simplificar el código de arriba un poco, pero que usa el lenguaje con el que comenzó. Después de mucho buscar, por fin encontré la documentación en el sitio opciones de máscara de bits:

Site Options Bitmask

Así, por IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED que se dio como un ejemplo, usted estaría buscando un valor de 0x00000010 de la options de atributo.

enter image description here

Y de la ejecución del fragmento de Powershell:

Site options with Powershell


Edición #2: te escribí algo hoy:

#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  }
"@
        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)}
            }
        }
    }
}

Y aquí está en acción:

Get-ADSiteOptions

3voto

Axel Limousin Puntos 11

La documentación mencionada por Ryan omite 2 NTDSettings Opciones necesarias para apoyar a todas las combinaciones. Por favor buscar debajo de los valores encontrados en 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
    }
"@

Y

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

se puede simplificar

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: