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.
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-ADSiteOptions
Cmdlet...sequiserqueeuescrevaumaparavocê,porumataxamuitomodesta...;)
Editar:aquiestáolinkdaMicrosoft,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 Você é um show, MDMarra. ;) FORCE_KCC_WHISTLER_BEHAVIOR
em uma entrevista, eu vou contratá-lo no local.
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_DISABLED
quevocêforneceucomoexemplo,vocêestariaprocurandoumvalorde0x00000010
paraoatributooptions
.
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: