------>
הקדמה קצרצרה: הלב של AD הוא שרת LDAP. כמעט כל המידע של AD נשמר בשרת LDAP. LDAP בפני עצמו הוא בסיס נתונים בעל היררכיה ומתוכנן מראש כך שפעולת הקריאה ממנו תהייה הכי מהירה שאפשר (בא על חשבון מהירות איטית של כתיבה). הנתונים של AD נשמרים בLDAP בשלושה partitions - יחידות לוגיות (ניתן בגסות רבה להשוות ל3 בסיסי נתונים בשרת SQL). המחיצות הן: domain - זה החלק שהרב מכירים - המידע על המשתמשים, מחשבים ושאר הדברים שעובדים אתם ביומיום נשמר שם. configuration - כולל את ההגדרות הפנימיות של מבנה הAD - שרתי DC, הנתונים על הטופולוגיה של שרתי AD, הדרך בה מתנהגים שרתי DC וכו'. schema - כוללת את הmeta-data של שרת LDAP - איזה אובייקטים יכולים להיות בAD, מהם המאפיינים של כל אובייקט, מה השדות של כל אובייקט וכו'. עכשיו חזרה ל Active Directory Users and Computers (או בקיצור ADUC ): ADUC מתנהג בצורה הבאה: כאשר הוא עולה, הוא טוען משרת הLDAP את: - הסכימה - בשביל להיות מסוגל לפרש אובייקטים בAD - את הdisplay specifiers - אלה מגדירים מה ניתן לעשות עם אובייקט מסוג מסויים. מה שמעניין אותנו זה הdisplay specifiers... כל הדברים שאתה רואה ברירת מחדל ממומשים בצורת אובייקט COM ונשמרים בDLL-ים רלוונטיים שADUC ניגש אליהם. למעשה כאשר אתה מסתכל על הפרטים של חשבון משתמש, אתה פונה לאובייקט COM שמראה לך נתונים מAD ומאפשר לך לבצע פעולות מסויימות. אז איך ADUC יודע לאיזה אובייקט COM לפנות ? פשוט: עבור כל טיפוס של אובייקטים מוגדרים display specifiers מתאימים. איפה הם נשמרים ? במחיצת הconfiguration של AD... עכשיו נשאלת השאלה: "אני מנהל רשת... אין לי שמץ של מושג בתכנות אובייקטים בטכנולוגית COM. מה אני עושה ?" והתשובה היא: אפשר להסתפק בסקריפטים. הכלים הדרושים: support tools של w2k/w2k3 server (ניתן למצוא על הCD של מערכת ההפעלה) notepad הערה על display specifiers - ממשקים, כידוע, יכולים להיות בכמה שפות. עבור כל שפה ניתן להגדיר display specifiers שונים. השפה האנגלית מספרה הוא 409... עכשיו לעבודה: 1) מתקינים בתחנה שלך (לא חייבים להתקין על הDC) את הsupport tools של w2k או w2k3 server. 2) מריצים את adsiedit ע"י start->run ומקישים adsiedit.msc 3) יפתח MMC כמו בתמונה. מנווטים ל CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=your_domain,DC=com 4) כיוון שאנחנו רוצים להוסיף פונקציונליות לאובייקטים מטיפוס "משתמש", אנחנו מאתרים את הרשומה user-Display שמגדירה display specifiers עבור טיפוס זה. 5) קליק פעמיים ויפתחו פרטים של האובייקט. תאתר את השורה בה מופיע contextMenu והקלק פעמיים. 6) עוד חלון יפתח ותראה שיש שם כבר ערך - זאת למעשה הפניה לאובייקט COM. כל שורה מייצגת משהו (אפליקציה, אובייקט COM או סקריפט) שיכול לבצע פעולות על האובייקט. אנחנו נוסיף הפניה לסקריפט חיצוני. חשוב להבין שADUC יקרא לסקריפט ויעביר לו את המיקום של האובייקט כארגומנט. השורה שמוסיפים כוללת 3 שדות: - מספר סידורי - שם שיופיע בADUC - האפליקציה/סקריפט שירוץ במקרה שלי הכנסתי שורה:
10, Show logon info, \\descartes\depot\develop\scripts\userlogoninf.vbs
בשביל הגמישות אני מפנה לסקריפט שיושב בשרת - כך אני אוכל להריץ את העסק מכל תחנה ברשת שמותקן בה ADUC. 7) מוסיפים את השורה ע"י לחיצה על ADD ואחרי כמה OK-ים אנחנו יכולים לבדוק מה קיבלנו. 8) מפעילים מחדש (בשביל שיטען מחדש את display specifiers) את ADUC, מוצאים איזה חשבון משתמש וקליק ימני. ופלא: מופיעה שורה חדשה ! עכשיו לסקריפט עצמו: לוקחים את השורות הבאות ושומרים בקובץ טקסט במקום שציינו קודם:
On Error Resume Next Set wshArguments = WScript.Arguments Set objUser = GetObject(wshArguments(0)) str1 = "Last Login: " & objUser.LastLogin str2 = "Last Logoff: " & objUser.LastLogoff str3 = "Last Failed Login: " & objUser.LastFailedLogin str4 = "Logon Count: " & objUser.logonCount str5 = "Bad Login Count: " & objUser.BadLoginCount str6 = "Password Last Changed: " & objUser.PasswordLastChanged MsgBox str1 & vbCrLf & str2 & vbCrLf & str3 & vbCrLf & str4 & vbCrLf & str5 & vbCrLf & str6,,objUser.Name
במקרה שלי הטקסט הופך לקובץ descartes\depot\develop\scripts\userlogoninf.vbs\\ זהו למעשה סקריפט די פשוט שנכתב בשפת סקריפטים VBS. הוא לוקח את הפרמטר הראשון שהועבר לו (ADUC שולח את המיקום של האובייקט בAD כפרמטר ראשון), מחפש בAD את האובייקט ומסתכל על המאפיינים שלו. משם הוא שולף את הפרטים על החשבון משתמש ומציג לנו. שאלות ?