Edit # 3: Aktualisieren der Referenzdokumentation.
Edit # 2: Noch einmal bearbeiten, weil ich etwas in PS geschrieben habe, um genau das zu tun, was Sie versuchen. Es ist ganz unten.
Ich werde weitermachen und behaupten, dass es derzeit keinen Powershell Friendly (tm) Weg gibt, dies zu tun. Natürlich können Sie Powershell auch weiterhin verwenden, um die LDAP-Abfrage erforderlich zu machen, damit diese Optionen angezeigt werden, wenn Sie dies wirklich möchten. Überprüfen Sie das options
Attribut des NTDS Settings
Objekts jedes Servers, der einer AD-Site zugeordnet ist:
Das ist das genaue Attribut, bei dem es sich um eine Bitmaske handelt, mit der repadmin.exe arbeitet. Repadmin.exe enthält einen benutzerfreundlichen Bitmaskenübersetzer in seinem Code. Ebenso wie das ADSIEdit MMC-Snap-In. Sie müssten diesen Bitmaskenübersetzer jedoch in Powershell neu erstellen.
Zum Beispiel Repadmin /options <DC> [{+|-} IS_GC]
ist ein gültiger Befehl, und jetzt wissen wir genau, mit welchem Bit er arbeitet.
Hier ist die relativ beschissene MSDN-Dokumentation zum options
Attribut.
Bessere MSDN-Dokumentation zum options
Attribut.
Optionsattribut
Ein Bitfeld, in dem die Bedeutung der Bits von Objektklasse zu Objektklasse variiert. Kann bei Inter-Site-Transport-, NTDS-Connection-, NTDS-DSA-, NTDS-Site-Settings- und Site-Link-Objekten auftreten.
Und hier ist ein Beispiel für die Suche nach Optionen mithilfe von Matching-Regeloperatoren der alten Schule:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Dieser Filter verwendet den Übereinstimmungsregeloperator LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803), um nTDSDSA-Objekte zu finden, für die das Bit niedriger Ordnung in der Bitmaske des Optionsattributs festgelegt ist. Das niederwertige Bit, das der in Ntdsapi.h definierten Konstante NTDSDSA_OPT_IS_GC entspricht, identifiziert das nTDSDSA-Objekt eines globalen Katalogservers. Weitere Informationen zu Übereinstimmungsregeln finden Sie unter Suchfiltersyntax.
Oh Mann, hört sich das lustig an!
Einige andere Werte für die Bitmaske:
Damit sollten Sie genug Informationen haben, um Ihr eigenes Get-ADSiteOptions
Cmdlet zu rollen ... wenn Sie möchten, dass ich eines für Sie schreibe, werde ich es für eine sehr bescheidene Gebühr tun ...;)
Bearbeiten: Hier ist der Microsoft-Link Repadmin für Experten , der den Unterschied zwischen den Unterbefehlen repadmin options
und siteoptions
beschreibt:
Mithilfe des Unterbefehls siteoptions können wir das im NTDS-Site-Einstellungsobjekt gespeicherte Optionsattribut ändern.
Wie für diese Bitmap? Ist es überhaupt dokumentiert? Nicht sicher. Wenn Sie mir sagen können, was FORCE_KCC_WHISTLER_BEHAVIOR
in einem Interview bedeutet, werde ich Sie sofort einstellen. Du bist so ein Showoff, MDMarra. ;)
Zusammenfassend entspricht das options
Attribut auf dem CN=NTDS Settings
Objekt für jeden Domänencontroller den DC-spezifischen Optionen, dh repadmin <DC> /options
, während das options
Attribut auf dem CN=NTDS Site Settings
Objekt unter jedem Standort entspricht repadmin /siteoptions
.
Also, um endlich deine Frage zu beantworten. Erhalten spezifischer Site-Optionen, nicht DC-Optionen:
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
}
Wenn keine Site-Optionen festgelegt sind, gibt Powershell diese nicht zurück. Sie könnten den obigen Code wahrscheinlich ein wenig vereinfachen, aber das verwendet die Sprache, mit der Sie begonnen haben. Nachdem ich viel zu viel gesucht hatte, fand ich endlich die Dokumentation auf der Bitmask der Site-Optionen :
Also für , IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
dass Sie als ein Beispiel gab, dann würden Sie für einen Wert von suchen 0x00000010
für das options
Attribut.
Und vom Ausführen des Powershell-Snippets:
Edit # 2: Ich habe dir heute etwas geschrieben:
#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)}
}
}
}
}
Und hier ist es in Aktion:
FORCE_KCC_WHISTLER_BEHAVIOR
davon aus, dass spätere Versionen des KCC gezwungen werden werden, nur Optionen und Algorithmen aus dem Jahr 2003 zu verwenden. Was den Rest Ihres Beitrags betrifft, habe ich mir das gedacht. Danke für die Bestätigung.In der von Ryan erwähnten Dokumentation fehlen 2 NTDSettings-Optionen, die zur Unterstützung aller Kombinationen erforderlich sind. Nachfolgend finden Sie die Werte in :
ntdsapi.h
Und
kann vereinfacht werden durch
quelle