PowerShell का उपयोग करके AD साइट विकल्पों का पता लगाना


9

मैं PowerShell की तरह AD साइट विकल्प खोजने के लिए PowerShell का उपयोग कैसे कर सकता हूं +IS_INTER_SITE_AUTO_TOPOLOGY_DISABLED? मैं निम्नलिखित कमांड के साथ खेल रहा हूं, लेकिन यह उपयोगी कुछ भी थूकने के लिए नहीं मिल सकता है।

Get-ADObject -Filter 'objectClass -eq "site"' -Searchbase (Get-ADRootDSE).ConfigurationNamingContext` -Properties options

जवाबों:


17

# 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-ADSiteOptionsCmdlet को रोल करने के लिए पर्याप्त जानकारी होनी चाहिए ... यदि आप चाहते हैं कि मैं आपके लिए एक लिखूं, तो मैं बहुत मामूली शुल्क के लिए ...;)

संपादित करें: यहाँ 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 
}

यदि कोई साइट विकल्प सेट नहीं हैं, तो पॉवर्सशेल उन्हें वापस नहीं करेगा। आप शायद ऊपर दिए गए कोड को थोड़ा सरल कर सकते हैं लेकिन यह उस पारलेन्स का उपयोग कर रहा है जिसे आपने शुरू किया था। बहुत अधिक खोज के बाद, मुझे अंततः साइट विकल्प बिटकॉइन पर प्रलेखन मिला :

साइट विकल्प Bitmask

तो के लिए IS_INTER_SITE_AUTO_TOPOLOGY_DISABLEDहै कि आप एक उदाहरण के रूप दे दिया, आप में से एक मूल्य के लिए विचार करना होता 0x00000010के लिए optionsविशेषता।

यहां छवि विवरण दर्ज करें

और पॉवर्सशेल स्निपेट चलाने से:

Powershell के साथ साइट विकल्प


# 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)}
            }
        }
    }
}

और यहाँ यह कार्रवाई में है:

Get-ADSiteOptions


एक शानदार पोस्ट!
साइमन कैटलिन

1
Whistler ऑपरेटिंग सिस्टम के XP / 2003 युग के लिए कोडनेम था। मुझे लगता FORCE_KCC_WHISTLER_BEHAVIORहै कि केसीसी के बाद के संस्करणों को केवल 2003-युग के विकल्पों और एल्गोरिदम का उपयोग करने के लिए मजबूर किया जाएगा। आपके बाकी पोस्ट के लिए, मैंने ऐसा सोचा। पुष्टि करने के लिए धन्यवाद।
एमडीमर्रा

4
पुन :: # 2 संपादित करें - क्या तुम मुझसे शादी करोगे?
एमडीएमरा

यह एक स्टार-क्रॉस ब्रोमांस है।
रयान रीस

3

प्रलेखन ने उल्लेख किया रयान को छोड़ देता है 2 NTDSettings सभी संयोजनों का समर्थन आवश्यक विकल्प। कृपया उन मानों को नीचे पाएं ntdsapi.h:

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_ELECTIONn = 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
    }
"@

तथा

SiteOptions=[Enum]::Parse('nTDSSiteSettingsFlags', $SiteSettings.Options)

द्वारा सरलीकृत किया जा सकता है

SiteOptions=[nTDSSiteSettingsFlags]$SiteSettings.Options

अतिरिक्त सूचना के लिए आपका धन्यवाद। मैंने इसे अपनी स्क्रिप्ट में शामिल कर लिया है।
रायन रीस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.