Düzenleme # 3: Referans belgelerini güncelleme.
Edit # 2: PS'de tam olarak yapmaya çalıştığınız şeyi yapmak için bir şey yazdığım için bir kez daha düzenleme. En altta.
Devam edeceğim ve şu anda bunu yapmanın Powershell Friendly (tm) yolu olmadığını iddia edeceğim . Ancak elbette Powershell'i, gerçekten isterseniz bu seçenekleri görmek için LDAP sorgusunu yapmak için kullanabilirsiniz. Check out options
vasfını NTDS Settings
AD sitesine ilişkili her sunucu nesnesi:
Bu, repadmin.exe'nin çalıştığı bir bit maskesi olan özniteliktir. Repadmin.exe kendi kodunda bir dostu bitmask çevirmeni içerir. ADSIEdit MMC ek bileşeni gibi. Ancak, Powershell'de o bitmask çevirmenini yeniden oluşturmanız gerekir.
Örneğin, Repadmin /options <DC> [{+|-} IS_GC]
geçerli bir komuttur ve şimdi tam olarak hangi bit üzerinde çalıştığını biliyoruz.
İşte options
öznitelik ile ilgili nispeten berbat MSDN belgeleri .
options
Özellik hakkında daha iyi MSDN belgeleri .
Seçenek Özelliği
Bitlerin anlamının objectClass'tan objectClass'a değiştiği bir bit alanı. Siteler Arası Aktarım, NTDS Bağlantısı, NTDS-DSA, NTDS-Site-Settings ve Site-Link nesnelerinde oluşabilir.
İşte eski okul eşleme kuralı operatörlerini kullanarak seçenekleri aramaya bir örnek :
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Bu filtre, options özelliğinin bit maskında düşük sıralı biti ayarlanmış nTDSDSA nesnelerini bulmak için LDAP_MATCHING_RULE_BIT_AND eşleme kuralı operatörünü (1.2.840.113556.1.4.803) kullanır. Ntdsapi.h dosyasında tanımlanan NTDSDSA_OPT_IS_GC sabitine karşılık gelen düşük dereceli bit, Genel Katalog sunucusunun nTDSDSA nesnesini tanımlar. Eşleme kuralları hakkında daha fazla bilgi için, bkz. Arama Filtresi Sözdizimi.
Oh oğlum bu kulağa eğlenceli geliyor!
Bitmask için diğer bazı değerler:
Bu nedenle, kendi Get-ADSiteOptions
Cmdlet'inizi yuvarlamak için yeterli bilgiye sahip olmalısınız ... eğer sizin için bir tane yazmamı istiyorsanız, çok mütevazı bir ücret karşılığında ...;)
Düzenleme: İşte repadmin ve alt komutları arasındaki farkı ayrıntılar, Uzmanlar için Repadmin Microsoft bağlantısı :options
siteoptions
Siteoptions alt komutunu kullanarak, NTDS Site Ayarları Nesnesinde depolanan options özniteliğini değiştirebiliriz.
Bu bitmap'e gelince? Belgeleniyor mu? Emin değil. Bir FORCE_KCC_WHISTLER_BEHAVIOR
röportajda bana ne anlama geldiğini söyleyebilirsen , seni yerinde tutacağım. Sen çok gösterişlisin, MDMarra. ;)
Dolayısıyla, sadece, özetlemek gerekirse options
üzerine niteliği CN=NTDS Settings
DC özgü seçenekleri, yani her etki alanı denetleyicisi karşılık gelir için nesne repadmin <DC> /options
, oysa options
üzerinde özniteliği CN=NTDS Site Settings
her site karşılık gelir altında nesneye repadmin /siteoptions
.
Sonunda sorunuzu cevaplamak için. DC seçeneklerini değil, özellikle site seçeneklerini alma:
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
}
Herhangi bir site seçeneği ayarlanmamışsa, Powershell bunları döndürmez. Muhtemelen yukarıdaki kodu biraz basitleştirebilirsiniz, ancak bu, başladığınız uyumu kullanır. Çok fazla arama yaptıktan sonra , site seçenekleri bitmask ile ilgili belgeleri buldum :
Bunun için IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
örnek olarak verdiğinizde 0x00000010
, options
özellik için bir değer arıyordunuz .
Powershell snippet'ini çalıştırmaktan:
Edit # 2: Bugün size bir şey yazdım:
#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)}
}
}
}
}
Ve işte burada: