ฉันจะทราบได้อย่างไรว่าคอมพิวเตอร์เครื่องใดเป็นตัวควบคุมโดเมนใน Windows โดยทางโปรแกรม


102

ฉันกำลังมองหาวิธีกำหนดชื่อ / ที่อยู่ IP ของตัวควบคุมโดเมนสำหรับโดเมนที่กำหนดที่คอมพิวเตอร์ไคลเอนต์เชื่อมต่ออยู่

ที่ บริษัท ของเราเรามีเครือข่ายเล็ก ๆ จำนวนมากที่เราใช้ในการทดสอบและส่วนใหญ่มีโดเมนเล็ก ๆ ของตัวเอง ตัวอย่างเช่นโดเมนหนึ่งชื่อ "TESTLAB" ฉันมีเวิร์กสเตชัน Windows XP ที่เป็นสมาชิกของโดเมน TESTLAB และฉันกำลังพยายามหาชื่อของตัวควบคุมโดเมนเพื่อที่ฉันจะได้ไปดูเพื่อดูว่าผู้ใช้กำหนดไว้สำหรับโดเมนใด ในห้องปฏิบัติการของเรามีการผสมผสานระหว่าง Windows Server 2000 และ Windows Server 2003 (และในความเป็นจริงอาจเป็นเซิร์ฟเวอร์ NT 4 สองตัว) ดังนั้นจึงเป็นการดีที่จะหาวิธีแก้ปัญหาที่ใช้ได้กับทั้งสองอย่าง

เมื่อดูบนอินเทอร์เน็ตดูเหมือนว่ามียูทิลิตี้ต่างๆเช่น Windows Power Shell หรือ nltest แต่สิ่งเหล่านี้ต้องการให้คุณดาวน์โหลดและติดตั้งยูทิลิตี้อื่น ๆ ฉันหวังว่าจะพบวิธีค้นหาตัวควบคุมโดเมนโดยไม่ต้องติดตั้งอะไรเพิ่มเติม

แก้ไขถ้าฉันต้องการเขียนโปรแกรมเพื่อค้นหาตัวควบคุมโดเมนหรือผู้ใช้ในโดเมนปัจจุบันฉันจะทำอย่างไร


เนื่องจากฉันใช้เวลาเพียงเล็กน้อยในการเขียนวิธีแก้ปัญหานี้ฉันคิดว่าฉันจะทำให้เป็นคำถามเกี่ยวกับการเขียนโปรแกรมและเปิดใหม่
tvanfosson

คำตอบ:


254

ด้วยภาษาโปรแกรมที่ง่ายที่สุด: DOS batch

echo %LOGONSERVER%

อาจไม่ใช่สิ่งที่ Dorky คิดในใจในตอนนั้น แต่ถึงกระนั้นก็อาจเป็นสิ่งที่ผู้อ่านส่วนใหญ่กำลังมองหา เอ๊ะ ... มันคือสิ่งที่ Dorky กำลังมองหา ห๊ะ!
andersoyvind

3
สิ่งนี้จะใช้ไม่ได้หากคุณกำลังมองหา DC ในโดเมนอื่นที่ไม่มีเครื่องอยู่
Brett Veenstra

@DorkyEngineer ทำเครื่องหมายเป็นคำตอบที่คุณเลือกได้อย่างไร
ErikE

20

ใน cmd บน Windows พิมพ์คำสั่งต่อไปนี้:

nltest /dclist:{domainname}

จะแสดงรายการตัวควบคุมโดเมนทั้งหมดในโดเมนเฉพาะ


3
และnltest /dclist:แสดงรายการตัวควบคุมทั้งหมดในโดเมนใด ๆ ที่แล็ปท็อปของฉันเชื่อมต่อ (Windows 7)
GMasucci

12

ใน C # /. NET 3.5 คุณสามารถเขียนโปรแกรมเล็กน้อยเพื่อทำ:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    string controller = context.ConnectedServer;
    Console.WriteLine( "Domain Controller:" + controller );
} 

นี่จะแสดงรายชื่อผู้ใช้ทั้งหมดในโดเมนปัจจุบัน:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
    using (UserPrincipal searchPrincipal = new UserPrincipal(context))
    {
       using (PrincipalSearcher searcher = new PrincipalSearcher(searchPrincipal))
       {
           foreach (UserPrincipal principal in searcher.FindAll())
           {
               Console.WriteLine( principal.SamAccountName);
           }
       }
    }
}


6

เรียกใช้gpresultที่พรอมต์คำสั่งของ Windows คุณจะได้รับข้อมูลมากมายเกี่ยวกับโดเมนปัจจุบันผู้ใช้ปัจจุบันกลุ่มความปลอดภัยของผู้ใช้และคอมพิวเตอร์ชื่อนโยบายกลุ่ม Active Directory Distinguished Name และอื่น ๆ


ฉันต้องใช้อาร์กิวเมนต์ "/ R" เพื่อรับรายงาน
Josiah

น่าลองgpresult /Z!!
ErikE

ข้อดีของ / Z คืออะไร? เพื่อจุดประสงค์ในการกำหนด DC ที่ใช้งานดูเหมือนจะเทียบเคียงได้
Josiah

1
ผู้คนอาจต้องการถูกนำไปที่ตัวเลือกนี้เนื่องจากข้อมูลที่มีอยู่มากมาย แต่คุณคิดถูกแล้วสำหรับการใช้งานเพียง DC ตัวเลือกอื่น ๆ จะรวบรัดกว่า
ErikE


0

ในการดึงข้อมูลเมื่อDomainControllerมีอยู่ในโดเมนที่เครื่องของคุณไม่ได้เป็นเจ้าของคุณต้องมีอะไรเพิ่มเติม

  DirectoryContext domainContext =  new DirectoryContext(DirectoryContextType.Domain, "targetDomainName", "validUserInDomain", "validUserPassword");

  var domain = System.DirectoryServices.ActiveDirectory.Domain.GetDomain(domainContext);
  var controller = domain.FindDomainController();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.