# 3 संपादित करें: संदर्भ प्रलेखन अद्यतन करना।
# 2 संपादित करें: एक बार और संपादन करना क्योंकि मैंने PS में कुछ ऐसा लिखा है जो आप करने की कोशिश कर रहे हैं। यह सबसे निचले पायदान पर है।
मैं आगे बढ़ने जा रहा हूं और दावा कर रहा हूं कि वर्तमान में इसे करने का कोई पॉवर्स फ्रेंडली (टीएम) तरीका नहीं है। लेकिन निश्चित रूप से आप इन विकल्पों को देखने के लिए LDAP क्वेरी को आवश्यक बनाने के लिए Powershell का उपयोग कर सकते हैं यदि आप वास्तव में चाहते थे। प्रत्येक सर्वर options
के NTDS Settings
ऑब्जेक्ट की विशेषता देखें जो एक AD साइट से संबंधित है:
यह सटीक विशेषता है, जो एक बिटमास्क है, जो repadmin.exe पर काम करता है। Repadmin.exe अपने कोड में एक अनुकूल बिटमास्क अनुवादक है। जैसा कि ADSIEdit MMC स्नैप-इन करता है। हालाँकि, आपको उस बिटमास्क अनुवादक को पॉवर्सशेल में फिर से बनाना होगा।
उदाहरण के लिए, Repadmin /options <DC> [{+|-} IS_GC]
एक मान्य कमांड है, और अब हम जानते हैं कि यह किस बिट पर संचालित होता है।
यहाँ options
विशेषता पर अपेक्षाकृत भद्दा MSDN प्रलेखन है ।
options
विशेषता पर बेहतर MSDN प्रलेखन ।
विकल्प विशेषता
एक बिटफील्ड, जहां बिट्स का अर्थ ऑब्जेक्टक्लास से ऑब्जेक्टक्लास तक भिन्न होता है। इंटर-साइट-ट्रांसपोर्ट, एनटीडीएस-कनेक्शन, एनटीडीएस-डीएसए, एनटीडीएस-साइट-सेटिंग्स और साइट-लिंक ऑब्जेक्ट पर हो सकता है।
और यहां पुराने स्कूल मिलान नियम ऑपरेटरों का उपयोग करके विकल्पों की खोज करने का एक उदाहरण है:
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
यह फ़िल्टर nTDSDSA ऑब्जेक्ट को खोजने के लिए LDAP_MATCHING_RULE_BIT_AND मिलान नियम ऑपरेटर (1.2.840.113556.1.4.803) का उपयोग करता है, जो विकल्प विशेषता के बिटमास्क में कम-क्रम बिट सेट है। निम्न-आदेश बिट, जो Ntdsapi.h में परिभाषित NTDSDSA_OPT_IS_GC निरंतर से मेल खाती है, ग्लोबल कैटलॉग सर्वर के nTDSDSA ऑब्जेक्ट की पहचान करता है। मिलान नियमों के बारे में अधिक जानकारी के लिए, खोज फ़िल्टर सिंटैक्स देखें।
ओह बॉय वो साउंड फन करता है!
बिटमास्क के लिए कुछ अन्य मूल्य:
तो इसके साथ आपको अपने स्वयं के Get-ADSiteOptions
Cmdlet को रोल करने के लिए पर्याप्त जानकारी होनी चाहिए ... यदि आप चाहते हैं कि मैं आपके लिए एक लिखूं, तो मैं बहुत मामूली शुल्क के लिए ...;)
संपादित करें: यहाँ Microsoft लिंक, विशेषज्ञों के लिए रेपडमिन है , जो रेपडमिन के options
और siteoptions
उपकमांड के बीच के अंतर का विवरण देता है :
साइटॉप्शन उपकमांड का उपयोग करके, हम NTDS साइट सेटिंग्स ऑब्जेक्ट पर संग्रहीत विकल्प विशेषता को बदल सकते हैं।
उस बिटमैप के लिए के रूप में? क्या यह भी प्रलेखित है? निश्चित नहीं। यदि आप मुझे बता सकते हैं कि FORCE_KCC_WHISTLER_BEHAVIOR
एक साक्षात्कार में क्या मतलब है, तो मैं आपको मौके पर रखूंगा। आप ऐसे शोऑफ, एमडीएमरा हैं। ;)
तो बस योग करने के लिए, प्रत्येक डोमेन नियंत्रक के लिए ऑब्जेक्ट options
पर विशेषता CN=NTDS Settings
डीसी-विशिष्ट विकल्पों से मेल खाती है, अर्थात repadmin <DC> /options
, जबकि प्रत्येक साइट के तहत ऑब्जेक्ट options
पर विशेषता CN=NTDS Site Settings
मेल खाती है repadmin /siteoptions
।
तो, अंत में अपने प्रश्न का उत्तर दें। विशेष रूप से साइट विकल्प प्राप्त करना, डीसी विकल्प नहीं:
ForEach($Site In (Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext))
{
Get-ADObject "CN=NTDS Site Settings,$($Site.DistinguishedName)" -Properties Options
}
यदि कोई साइट विकल्प सेट नहीं हैं, तो पॉवर्सशेल उन्हें वापस नहीं करेगा। आप शायद ऊपर दिए गए कोड को थोड़ा सरल कर सकते हैं लेकिन यह उस पारलेन्स का उपयोग कर रहा है जिसे आपने शुरू किया था। बहुत अधिक खोज के बाद, मुझे अंततः साइट विकल्प बिटकॉइन पर प्रलेखन मिला :
तो के लिए IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED
है कि आप एक उदाहरण के रूप दे दिया, आप में से एक मूल्य के लिए विचार करना होता 0x00000010
के लिए options
विशेषता।
और पॉवर्सशेल स्निपेट चलाने से:
# 2 संपादित करें: मैंने आज आपको कुछ लिखा है:
#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)}
}
}
}
}
और यहाँ यह कार्रवाई में है: