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' options
attributo NTDS Settings
dell'oggetto di ciascun server associato a un sito AD:
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:
Quindi con quello dovresti avere abbastanza informazioni per girare il tuo Get-ADSiteOptions
Cmdlet ... 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 options
e i siteoptions
sottocomandi 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_BEHAVIOR
significa in un'intervista, ti assumerò sul posto. Sei un tale showoff, MDMarra. ;)
Quindi, per riassumere, l' options
attributo CN=NTDS Settings
sull'oggetto per ciascun controller di dominio corrisponde alle opzioni specifiche del controller di dominio, vale a dire repadmin <DC> /options
, mentre l' options
attributo CN=NTDS Site Settings
sull'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 :
Quindi, per IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
quello che hai dato come esempio, dovresti cercare un valore 0x00000010
per l' options
attributo.
E dall'esecuzione dello snippet 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: