Edycja nr 3: Aktualizacja dokumentacji referencyjnej.
Edycja nr 2: Edycja jeszcze raz, ponieważ napisałem coś w PS, aby zrobić dokładnie to, co próbujesz zrobić. Jest na dole.
Zamierzam śmiało stwierdzić, że obecnie nie ma na to sposobu Powershell Friendly (TM) . Ale oczywiście możesz nadal używać programu Powershell, aby zapytanie LDAP było konieczne, aby zobaczyć te opcje, jeśli naprawdę chcesz. Sprawdź options
atrybut NTDS Settings
obiektu każdego serwera, który jest powiązany z witryną AD:
To jest dokładnie ten atrybut, który jest maską bitową, na której działa repadmin.exe. Repadmin.exe zawiera przyjazny kod tłumacza maski bitowej w swoim kodzie. Podobnie jak przystawka ADSIEdit MMC. Jednak trzeba będzie ponownie utworzyć tego translatora maski bitowej w programie Powershell.
Na przykład Repadmin /options <DC> [{+|-} IS_GC]
jest poprawnym poleceniem, a teraz wiemy dokładnie, na którym bicie działa.
Oto relatywnie kiepska dokumentacja MSDN tego options
atrybutu.
Lepsza dokumentacja MSDN dla options
atrybutu.
Opcje Atrybut
Pole bitowe, w którym znaczenie bitów różni się w zależności od objectClass do objectClass. Może wystąpić w przypadku transportu między lokacjami, połączenia NTDS, NTDS-DSA, ustawień NTDS i obiektów Site-Link.
A oto przykład wyszukiwania opcji za pomocą oldskulowych operatorów reguł dopasowywania:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Ten filtr używa operatora reguły dopasowywania LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) w celu znalezienia obiektów nTDSDSA, które mają ustawiony bit niskiego rzędu w masce bitowej atrybutu options. Bit niskiego rzędu, który odpowiada stałej NTDSDSA_OPT_IS_GC zdefiniowanej w Ntdsapi.h, identyfikuje obiekt nTDSDSA serwera wykazu globalnego. Aby uzyskać więcej informacji o dopasowywaniu reguł, zobacz Składnia filtru wyszukiwania.
Och, chłopcze, to brzmi zabawnie!
Niektóre inne wartości dla maski bitowej:
Powinieneś więc mieć wystarczającą ilość informacji, aby rzucić własne Get-ADSiteOptions
Cmdlet ... jeśli chcesz, żebym napisał jeden dla ciebie, zrobię to za bardzo skromną opłatą ...;)
Edycja: Oto link Microsoft, Repadmin dla Ekspertów , który szczegółowo przedstawia różnicę między options
i siteoptions
podpoleceń z repadmin:
Używając podkomendy siteoptions, możemy zmienić atrybut options przechowywany w obiekcie ustawień witryny NTDS.
Co do tej bitmapy? Czy to w ogóle jest udokumentowane? Niepewny. Jeśli możesz mi powiedzieć, co FORCE_KCC_WHISTLER_BEHAVIOR
oznacza w wywiadzie, zatrudnię cię na miejscu. Jesteś taki popisowy, MDMarra. ;)
Podsumowując, options
atrybut na CN=NTDS Settings
obiekcie dla każdego kontrolera domeny odpowiada opcjom specyficznym dla kontrolera domeny, tj. repadmin <DC> /options
Podczas gdy options
atrybut na CN=NTDS Site Settings
obiekcie w każdej witrynie odpowiada repadmin /siteoptions
.
Tak, aby w końcu odpowiedzieć na twoje pytanie. Uzyskiwanie konkretnych opcji witryny, a nie opcji DC:
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
}
Jeśli nie ustawiono opcji witryny, PowerShell nie zwróci ich. Prawdopodobnie możesz trochę uprościć powyższy kod, ale używasz języka, z którym zacząłeś. Po zbyt wielu poszukiwaniach w końcu znalazłem dokumentację dotyczącą maski bitowej opcji strony :
Więc na IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
które dał jako przykład, chcesz być patrząc na wartości 0x00000010
dla options
atrybutu.
I od uruchomienia fragmentu PowerShell:
Edytuj # 2: Napisałem ci dzisiaj coś:
#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)}
}
}
}
}
I oto jest w akcji: