Edit # 3: Atualizando a documentação de referência.
Edit # 2: Editando mais uma vez porque escrevi algo no PS para fazer exatamente o que você está tentando fazer. Está no fundo.
Vou seguir em frente e afirmar que não há como o Powershell Friendly (tm) fazer isso no momento. Mas é claro que você ainda pode usar o Powershell para tornar a consulta LDAP necessária para ver essas opções, se realmente quiser. Confira o options
atributo do NTDS Settings
objeto de cada servidor associado a um site do AD:
Esse é o atributo exato, que é uma máscara de bit, no qual repadmin.exe funciona. Repadmin.exe contém um amigável tradutor de máscaras de bits no seu código. Assim como o snap-in ADSIEdit MMC. No entanto, você precisará recriar esse tradutor de máscaras de bits no Powershell.
Por exemplo, Repadmin /options <DC> [{+|-} IS_GC]
é um comando válido e agora sabemos exatamente em que parte ele opera.
Aqui está a documentação do MSDN relativamente ruim no options
atributo.
Melhor documentação do MSDN no options
atributo
Atributo de opções
Um campo de bits, onde o significado dos bits varia de objectClass para objectClass. Pode ocorrer nos objetos Transporte entre Sites, Conexão NTDS, NTDS-DSA, Configurações do Site NTDS e Link do Site.
E aqui está um exemplo de pesquisa de opções usando operadores de regras de correspondência da velha escola:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Esse filtro usa o operador de regra correspondente LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) para localizar objetos nTDSDSA que tenham o bit de ordem inferior definido na máscara de bits do atributo options. O bit de ordem inferior, que corresponde à constante NTDSDSA_OPT_IS_GC definida em Ntdsapi.h, identifica o objeto nTDSDSA de um servidor Global Catalog. Para obter mais informações sobre regras de correspondência, consulte Sintaxe do filtro de pesquisa.
Oh garoto, isso parece divertido!
Alguns outros valores para a máscara de bits:
Portanto, com isso, você deve ter informações suficientes para lançar seu próprio Get-ADSiteOptions
cmdlet ... se quiser que eu escreva um para você, eu o farei, por uma taxa muito modesta ...;)
Edit: Aqui está o link da Microsoft, Repadmin for Experts , que detalha a diferença entre os subcomandos options
e siteoptions
repadmin:
Usando o subcomando siteoptions, poderíamos alterar o atributo options armazenado no Objeto de Configurações do Site NTDS.
Quanto a esse bitmap? Está documentado? Não tenho certeza. Se você pode me dizer o que FORCE_KCC_WHISTLER_BEHAVIOR
significa em uma entrevista, contratarei você imediatamente. Você é um grande show, MDMarra. ;)
Portanto, apenas para resumir, o options
atributo no CN=NTDS Settings
objeto para cada controlador de domínio corresponde às opções específicas do controlador de domínio, ou seja repadmin <DC> /options
, enquanto o options
atributo no CN=NTDS Site Settings
objeto em cada site corresponde repadmin /siteoptions
.
Então, para finalmente responder sua pergunta. Obtendo especificamente opções do site, não opções do 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 retornará. Você provavelmente poderia simplificar um pouco o código acima, mas isso é usar a linguagem com a qual você começou. Depois de muita pesquisa, finalmente encontrei a documentação no bitmask de opções do site :
Portanto, IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
como exemplo, você procuraria um valor 0x00000010
para o options
atributo
E executando o snippet do Powershell:
Edit # 2: Escrevi algo para você hoje:
#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. [email protected].
#>
[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)}
}
}
}
}
E aqui está em ação:
FORCE_KCC_WHISTLER_BEHAVIOR
que forçarei versões posteriores do KCC a usar apenas opções e algoritmos da era 2003. Quanto ao resto do seu post, achei que sim. Obrigado por confirmar.A documentação mencionada por Ryan omite 2 NTDSettings Options necessárias para oferecer suporte a todas as combinações. Encontre abaixo os valores encontrados em
ntdsapi.h
:E
pode ser simplificado por
fonte