البرنامج النصي للكشف عن ملف على الشبكة المحلية. البرنامج النصي لإنشاء مستخدم في AD باستخدام بوويرشيل

06.03.2019
2 يوليو، 2012 الساعة 11:09 مساءً كيفية "جذب" 100500 مستخدم جديد بسرعة إلى الدليل النشط(تم رفعه على MS Windows Server 2003) أو برنامج نصي لإضافة حسابات المستخدمين إلى Active Directory
  • برمجة النظام

لقد حدث أنني اخترت مهنة مسؤول النظام. وأنا أقوم بهذه المهمة الناكرة للجميل في بعض الأحيان منذ ما يقرب من 6 سنوات حتى الآن.
ذات مرة، قبل عامين، واجهت سؤالاً، والذي تحول فيما بعد إلى مهمة، وهو كيفية إنشاء حسابات مستخدمين جديدة بسرعة نسبية في AD ضمن نظام التشغيل MS Windows Server 2003؟

أعتقد أن الجميع يعرف طريقة إضافة مستخدم إلى المجال، إذا جاز التعبير، "يدويًا". أي أنه لإضافة حسابات مستخدمين AD جديدة، يتعين عليك القيام بالأشياء التالية تقريبًا: فتح الأداة الإضافية "المستخدمون وأجهزة الكمبيوتر" لنظام التشغيل المذكور أعلاه، وفتح OU (Organization Unite) المقابل، وبدء أي من الأساليب المعروفةإنشاء مستخدم، ثم في النافذة التي تفتح، قم بإنشاء مستخدمين واحدًا تلو الآخر. أوافق على أن هذا طويل جدًا وممل، خاصة إذا كانت حسابات المستخدمين المطلوبة ليست 10، ولكن، على سبيل المثال، 300 أو 500 أو أكثر. ستصبح هذه مهمة روتينية بشكل خاص عندما تحتاج إلى ملء حقول "تسجيل الدخول" و"كلمة المرور" ليس فقط، ولكن أيضًا الحقول "الاسم الأخير" و"الاسم الأول للعائلة" و"المنصب" و"القسم" و"المؤسسة" "الموجود في علامات تبويب مختلفة" وما إلى ذلك. بالطبع ستقول أنه لم يقم أحد حتى الآن بإلغاء طريقتي "النسخ واللصق" و"الكتابة العمياء"، لكن جربها، واشعر بعدد المستخدمين الذي تتعب منهم، وإذا لم تتعب، ثم حساب عدد الأخطاء التي ارتكبت عند إدخال البيانات.
بشكل عام، عندما أدركت أنني بحاجة إلى القيام بشيء حيال ذلك ولأن الوقت كان لدي محدودًا، لجأت إلى موارد الإنترنت للبحث عن برنامج نصي يجب أن يكون موجودًا وحل هذه المشكلة، كما أخبرني حدسي. للأسف، شعرت بخيبة أمل تقريبًا لما رأيته. كان الإنترنت مليئًا بجميع أنواع نصوص الأتمتة المهام المختلفةفي بيئة الإعلان، ولكن ما احتاجه كان مفقودًا تمامًا. كان علي الاتصال موارد اللغة الإنجليزية، في أحدها (للأسف، لقد فقدت رابط الموقع بالفعل في وقت كتابة هذا المقال، ولدي أفكار حول المكان الذي يجب أن أبحث فيه، وإذا وجدته، سأنشره) كان هناك نص معين "سمكة" على VBS في شكل "خام" للغاية، والذي ظهر عند محاولة استخدامه نظام اختبارالذي لم يؤد إلى أي شيء - إنه ببساطة لم ينجح بداهة بسبب وجود العديد من أوجه القصور والأخطاء المبتذلة فيه ، كما اكتشفت لاحقًا. كان عليّ التصحيح وإضافة التعليمات البرمجية، علاوة على ذلك، أن أصبح مبرمجًا لـ VBS :)
لهذا، اسمحوا لي أن أقدم للجمهور المحترم برنامجًا نصيًا لإضافة حسابات المستخدمين في AD إلى الوحدات التنظيمية المنشأة مسبقًا (المستوى الأول). إذا نشأ السؤال لماذا لا يتم إنشاء الوحدات التنظيمية تلقائيًا، فسأجيب مقدمًا أنني لم أجد كيفية القيام بذلك، والتحكم في التغييرات التي تم إجراؤها في AD أكثر صرامة - لا يزال يتعين عليك عدم اللعب في وضع الحماية، ولكن قم بإجراء تغييرات ملموسة على نظام قوي وفعال في الوقت الفعلي، يسمى "الدليل النشط".

ملاحظة مهمة!
تحتاج إلى إنشاء ملف مسبقًا يحتوي على، مفصولاً بـ ";" المعلمات المطلوبة:
تسجيل الدخول؛ كلمة المرور؛ الاسم اسم العائلة؛ اسم العائلة؛ مسمى وظيفي؛ قسم؛ منظمة؛
مطلوب محدد زائدة ";". في كل سطر مثلا:
سيرين بيرد 1؛ كلمة المرور1; الاسم الأول Patronymic1; اسم العائلة1; الموقف1؛ القسم 1؛ منظمة 1؛
سيرين بيرد2; كلمة المرور2; الاسم الأول Patronymic2؛ اسم العائلة2; الموقف2؛ القسم 2؛ المنظمة 2؛
سيرين-bird4; كلمة المرور3؛ الاسم الأول 2 الاسم الأوسط 3؛ الاسم الأخير3؛ الموقف3؛ القسم 3؛ منظمة 3؛
سيرين بيرد3; كلمة المرور 4؛ الاسم الأول Patronymic4؛ اسم العائلة 4؛ الوظيفة 4؛ القسم 4؛ منظمة 4؛
سيرين بيرد5; كلمة المرور5؛ الاسم الأول 2 الاسم الأوسط 5؛ الاسم الأخير5؛ الموقف5؛ القسم5؛ المنظمة5؛
… … … … … … …
يمكن أيضًا أن يعهد بإنشاء مثل هذا الملف إلى موظفين غير مؤهلين يعرفون كيفية استخدام محرر النصوص الأساسي. وبعد ذلك فقط تحقق من صحة الكتابة ووضع الفواصل، كما فعل خادمك المتواضع.

ملاحظة هامة أخرى!
معلمة "المؤسسة" هي وحدة تنظيمية للمستخدم المقابل ولم يتم إنشاؤها بواسطة هذا البرنامج النصي، لذا لكي يعمل كل شيء، قم أولاً بإنشاء الوحدة التنظيمية المقابلة في جذر المجال (بالقرب من مجلد الوحدة التنظيمية "المستخدمون"). يتم تفسير ذلك من خلال حقيقة أنه في نطاقي كان هناك العديد من المنظمات العميلة مع مستخدمي الموظفين الخاصين بها، ومن هنا جاء هذا التقسيم.

لذلك، البرنامج النصي نفسه:
تعيين objArgs = WScript.Arguments
إذا كان objArgs.Count = 0
WScript.Echo "يضيف مستخدمين إلى المجال."
WScript.Echo "add_to_ad.vbs [اسم الملف]"
WScript.Echo "[اسم الملف] - ملف يحتوي على قائمة المستخدمين"
WScript.Echo "تنسيق الملف: تسجيل الدخول؛ كلمة المرور؛ الاسم الأول - اسم العائلة؛ اسم العائلة؛ المنصب؛ القسم؛ المنظمة؛"
WScript.Quit
إنهاء إذا
المسار = objArgs(0)

تعيين fso = CreateObject("Scripting.FileSystemObject")
تعيين objFile = fso.OpenTextFile(path, 1)
قم بذلك حتى objFile.AtEndOfStream
str = objFile.ReadLine
لأني = 1 إلى Len(str) الخطوة 1
strCh = منتصف (شارع، ط، 1)
إذا strCh = "؛" ثم
حدد الحالة Z
الحالة 0
اسم المستخدم = strRez " *** تسجيل الدخول
حالة 1
UserPassword = strRez " *** كلمة المرور
الحالة 2
الاسم الأول = strRez " *** الاسم الأول - اسم العائلة
الحالة 3
LastName = strRez " *** اسم العائلة
الحالة 4
العنوان = strRez " *** الوظيفة
الحالة 5
القسم = strRez " *** القسم
الحالة 6
الشركة = strRez " *** المنظمة
"الحالة 7
"Manager = strRez" *** Manager
"الحالة 8
"OfficeRoom = strRez " *** Room
حدد النهاية
ستريز = ""
سترش = ""
ض = ض + 1
آخر
strRez = strRez + strCh
إنهاء إذا
التالي
ستريز = ""
سترش = ""
ض = 0

تعيين objRoot = GetObject("LDAP://RootDSE")
تعيين objADSystemInfo = CreateObject("ADSystemInfo")
DomainDNSName = objADSystemInfo.DomainDNSName
DomainDN = objRoot.Get("DefaultNamingContext")
ContainerDN = "ou="&Company & ""، & DomainDN

PName = اسم المستخدم & "@" & DomainDNSName ""@snb.local"

"!!! هام!!!***نشير إلى الوحدة التنظيمية التي تم إنشاؤها مسبقًا والتي يندفع إليها المستخدمون الجدد *******

تعيين objOU = GetObject("LDAP://" & ContainerDN)

"*************************** إنشاء حساب مستخدم المجال **************** * ****
تعيين objUser = objOU.Create("User"، "cn=" + اسم المستخدم)
" **** تسجيل الدخول *****
objUser.Put "sAMAccountName"، اسم المستخدم
objUser.SetInfo

" ****** كلمة المرور *******
تعيين objUser = GetObject("LDAP://cn=" + UserName + ""،" + ContainerDN)
objUser.SetPassword كلمة مرور المستخدم

" ******* يو بي إن **********
objUser.Put "userPrincipalName"، pName

"****** تعطيل الحساب *******
objUser.AccountDisabled = TRUE

" ******** اسم *********
objUser.Put "givenName"، الاسم الأول

" ***** اسم العائلة *********
objUser.Put "sn"، اسم العائلة

" ***** اسم العرض ******
objUser.Put "displayName"، LastName & "" & FirstName

"الأحرف الأولى
objUser.Put "الأحرف الأولى"، اليسار (الاسم الأول، 1) و "." "& اليسار (الاسم الأخير، 1)

" ***** مسمى وظيفي ******
objUser.Put "العنوان"، العنوان

" ***** قسم ******
objUser.Put "القسم"، القسم

" منظمة
objUser.Put "الشركة"، الشركة

" مشرف
"objUser.Put"مدير"، مدير

" غرفة
"objUser.Put "physicalDeliveryOfficeName"، OfficeRoom

" ***** اضبط لطلب تغيير كلمة المرور عند تسجيل الدخول التالي ***
objUser.Put "pwdLastSet"، CLng(0)

ObjUser.SetInfo

"WScript.Echo "المستخدم -" + اسم المستخدم + " تمت إضافته إلى AD"

حلقة
WScript.Echo "تمت إضافة المستخدمين إلى AD"
objFile.Close

رمز إضافي لإدراجه في البرنامج النصي:

" الدليل الرئيسي
"objUser.Put "HomeDirectory"، strHomeDirPath

" صندوق بريد
"objUser.Put "mailNickname"، strName

""بعض الأمثلة الأخرى:
"ObjUser.Put "الوصف"، "السنة الثانية"
"objUser.Put "physicalDeliveryOfficeName"، sOfficeName
"objUser.Put "ProfilePath"، sScPath
"sHDDrive objUser.ضع "HomeDrive"، "Z"
"objUser.Put "TerminalServicesProfilePath"، sTermProf
"objUser.Put "TerminalServicesHomeDirectory"، sTermHDir

الكود من محرر النصتحتاج إلى حفظه بالملحق .vbs
يتم تشغيل البرنامج النصي عن طريق تمرير المعلمات من الملف.
على سبيل المثال: script.vbs users.txt
، أين
script.vbs - البرنامج النصي نفسه
users.txt - ملف يحتوي على بيانات الإدخال.

يستغرق تنفيذ البرنامج النصي ثوانٍ مع نتائج فورية.
كما ترون من الكود، إذا قمت بإلغاء التعليق على سطرين إضافيين وقمت بإجراء إضافات إلى الملف باستخدام معلمات الإدخال، ثم يمكنك "تلقائيًا" إدخال المدير ورقم الغرفة. يمكن تطوير البرنامج النصي بشكل غير محدود. على سبيل المثال، أضف إمكانية إدخال حقل مثل "الهاتف" بنفس الطريقة.
باعتباري محرر نصوص لنظام التشغيل Windows، يمكنني أن أوصي باستخدام برنامج Notepad++ المجاني والعملي للغاية.
واحد من روابط مفيدة، حيث توجد نصوص برمجية في VBS.

هل تتذكر ملفات DOS BAT؟ لقد كانت طريقة رائعة لأتمتة المهام المتكررة. Windows، للأسف، لم يقدم البديل المكافئ والوسائل مطوري الطرف الثالثلم تتجذر أسباب مختلفة. ولكن يبدو أن الوضع يتحسن. Windows Scripting Host (WSH) - مضيف برمجة نصية جديد ومستقل عن اللغة لنظامي التشغيل Win9x وNT، يسمح لك بإنشاء نظائرها من ملفات BAT على البصرية الأساسية Scripting Edition وJScript ولغات البرمجة النصية الأخرى مثل Active Perl أو Python.

هنا سوف نناقش بعض فوائد ويندوزمضيف البرمجة النصية.

فوائد مضيف البرمجة النصية لـ Windows

في السابق، كانت لغة البرمجة النصية الوحيدة التي يدعمها Windows هي لغة أوامر DOS. لكن قدراته ضعيفة جدًا مقارنة بـ VBScript وJScript. بالرغم من لغة الأوامرلا يزال DOS مدعومًا، وتسمح لك البرامج النصية ActiveX الحديثة بحل المشكلات الأكثر تعقيدًا.

يمكن للبرنامج النصي اتخاذ قرارات بناءً على استخدام عبارات If/Else الكاملة. يمكن للبرنامج النصي تنفيذ مجموعة واحدة من الأوامر إذا كان الشرط صحيحًا، أو مجموعة أخرى إذا كان الشرط خاطئًا. بالإضافة إلى ذلك، JScript وVBScript جيدان في إجراء العمليات الحسابية، بما في ذلك الدوال المثلثية الشائعة.

آخر خاصية ويندوزمضيف البرمجة النصية هو أنه يمكن تنفيذ البرامج النصية خارج المتصفح. ما عليك سوى النقر على الملف الذي يحتوي على نص البرنامج النصي أو إدخال اسمه في سطر الأوامر لتشغيله للتنفيذ. يعد Windows Scripting Host مستهلكًا للذاكرة ومثاليًا لأتمتة Windows.

آلات المضيف والسيناريو

بغض النظر عن مدى جودة لغات البرمجة النصية، لا يمكنك فعل الكثير بها. إنهم غير قادرين على التأثير على أي شيء خارج النص الأصلي. لا تحتوي هذه اللغات على تعليمات مباشرة تسمح لك بقراءة أو كتابة الملفات الموجودة على القرص، وعرض المعلومات على سطر الأوامر، وتغيير السجلات في سجل ويندوزوما إلى ذلك وهلم جرا.

للتعامل مع مثل هذه المهام، يمكنك استخدام كائنات COM إضافية. تم تضمين عدد من هذه الكائنات في توزيعة WSH، وأحد هذه الكائنات، وهو WScript، لديه مثيل تم إنشاؤه بالفعل ويمكن استخدامه مباشرة، دون أن يتم إنشاؤه أولاً. يتم إنشاء الباقي باستخدام بناء الجملة الخاص باللغة أو وظيفة WScript.CreateObject.

كائنات WSH

يأتي Windows Scripting Host مع 4 كائنات: Wscript وWshShell وWshNetwork وFileSystemObject.

كل كائن بطبيعة الحال لديه مجموعة الأساليب الخاصةوالخصائص.

يسمح كائن Wscript للبرامج النصية "بالتعرف على نفسها". بالإضافة إلى ذلك، يسمح هذا الكائن للبرامج النصية بتشغيل التطبيقات والتحكم فيها. يتم سرد الخصائص والأساليب الرئيسية لهذا الكائن في الجدول 1.

وصف العقاروصف الطريقة
الحجج إرجاع مؤشر إلى قائمة الوسائط سطر الأوامر
الاسم الكامل إرجاع الاسم ملف تنفيذيالمضيف و مسار كاملإليه (على سبيل المثال، C:\Windows\wscript.exe)
اسم مخرجات رائعة نقش ويندوزمضيف البرمجة النصية
طريق يحدد الدليل والمسار الذي يحتوي على wscript.exe أو cscript.exe
اسم البرنامج النصي الكامل إرجاع المسار الكامل واسم الملف القابل للتنفيذ في هذه اللحظةالنصي
اسم البرنامج النصي نفس ScriptFullName، ولكن بدون مسار
إصدار إرجاع إصدار Windows Scripting Host المثبت
إنشاء كائن إنشاء كائن بواسطة ProgID الخاص به
ConnectObject يسمح لك بالاتصال بأحداث الكائن. كمعلمة، فإنه يأخذ الكائن الذي من الضروري الاتصال به وبادئة الإجراءات المقابلة للأحداث، التي تم تنفيذها في البرنامج النصي
كائن قطع الاتصال يتم قطع الاتصال عن كائن متصل بالطريقة السابقة
صدى صوت يعرض سلسلة نصية (في cscript - في StdOut، في Wscript - في شكل مربع حوار.
GetObject يسمح لك بالحصول على مؤشر إلى كائن من ملف أو كائن محدد في المعلمة strProgID.
يترك ينتهي البرنامج النصي
ينام يضع البرنامج النصي في حالة غير نشطة للوقت المحدد بالمللي ثانية

الجدول 1. أساليب وخصائص كائن WScript

يسمح كائن WshShell للبرامج النصية بتثبيت التطبيقات الأخرى وتكوينها. كما يوفر أيضًا إمكانية التواصل مع المستخدم وتعديل السجل وتحديد موقع المجلدات. وترد بعض خصائصه وطرقه في الجدول 2.

وصف العقاروصف الطريقة
بيئة

تقوم بإرجاع كائن يسمح لك بالحصول على قيم متغيرات البيئة، على سبيل المثال

تعيين WSHShell = CreateObject("WScript.Shell") تعيين WshSysEnv = WshShell.Environment("Process") WScript.Echo WshSysEnv("windir")

المجلدات الخاصة

إرجاع المسار الكامل إلى مجلدات خاصةابدأ نوع القائمة.

فيما يلي قائمة بالمجلدات المتاحة: AllUsersDesktop، وAllUsersStartMenu، وAllUsersPrograms، وAllUsersStartup، وDesktop، وFavorites، وFonts، وMyDocuments، وNetHood، وPrintHood، وPrograms، وRecent، وSendTo، وStartMenu، وStartup، والقوالب.

يجري يطلق التطبيق. الأمر StrCommand - أمر قابل للتنفيذ، تتيح لك المعلمة intWindowStyle التحكم في موضع النوافذ وسلوكها، وتسمح لك المعلمة bWaitOnReturn بإخبار كائن WshShell ما إذا كان يجب الانتظار حتى انتهاء تشغيل التطبيق من التنفيذ.
يظهر فجأة طريقة أخرى لعرض النص في النافذة
انشاء اختصار ينشئ اختصارات الملفات أو عناوين URL
سجل القراءة إرجاع قيمة المفتاح أو إدخال التسجيل حسب اسمه
قم بتسجيل الكتابة يقوم بإنشاء مفتاح تسجيل أو إدخال جديد أو كتابة قيمة جديدة إلى قيمة موجودة.
حذف التسجيل حذف مفتاح التسجيل أو الإدخال
LogEvent يسمح لك بكتابة رسالة إلى الحدث سجل ويندوز NT أو W2K أو WSH.log في الملف حالة ويندوز 9x
توسيع سلاسل البيئة يسمح لك بتوسيع سلسلة تحتوي على متغيرات البيئة
إرسال المفاتيح يسمح لك بمحاكاة إدخال لوحة المفاتيح

الجدول 2. خصائص وأساليب كائن WshShell

يتم استخدام كائن WshNetwork عند إنشاء البرامج النصية التي تقوم بتعديل تكوين الشبكة. يتضمن ذلك مهام مثل الاتصال بالشبكة وتثبيت الطابعات والتعيين تسميات الحروفمحركات أقراص الشبكة وما إلى ذلك. يتم سرد الخصائص والأساليب الرئيسية لـ WshNetwork في الجدول 3.

وصف الخصائصوصف الطريقة
اسم الحاسوب إرجاع اسم الكمبيوتر
مجال المستخدم إرجاع اسم المجال الذي تم تسجيل المستخدم فيه
اسم المستخدم يعود خمن ماذا!
شبكة خريطة القيادة يقوم بتعيين حرف معين من قبل المستخدم لمحرك أقراص الشبكة
EnumNetworkDrives إرجاع قائمة بمحركات أقراص الشبكة المعينة
إزالة محرك الشبكة قطع اتصال محرك أقراص الشبكة
إضافة WindowsPrinterConnection يسمح لك بالتثبيت طابعة جديدةفي نظام التشغيل Windows، أي تحديد المسار إلى الطابعة وبدء تثبيت برنامج التشغيل.
AddPrinterConnection يربط طابعة شبكة
إزالة اتصال الطابعة تعطيل طابعة الشبكة
SetDefaultPrinter يضبط الطابعة الافتراضية
EnumPrinterConnections إرجاع قائمة الطابعات المتصلة

الجدول 3. خصائص وأساليب كائن WshNetwork

الكائن الأخير، FileSystemObject، مطلوب لعمليات القرص. يتضمن ذلك القراءة والكتابة وحذف الملفات وإنشاء الدلائل.

يحتوي FileSystemObject على طرق BuildPath، وCopyFile، وCopyFolder، وCreateFolder، وCreateTextFile، وDeleteFile، وDeleteFolder، وDriveExists، وFileExists، وFolderExists، وGetAbsolutePathName، وGetBaseName، وGetDrive، وGetDriveName، وGetExtensionName، وGetFile، وGetFileName، وGetFolder، وGetParentFolderName، وGetTempName، موففولدر، أوبنتكستفيلي. أسمائهم لا تحتاج إلى تفسير منفصل. تقوم الخاصية الوحيدة الخاصة به، وهي محركات الأقراص، بإرجاع قائمة بمحركات الأقراص المتوفرة على هذا الجهاز، بما في ذلك محركات أقراص الشبكة.

ماذا تحتاج لتبدأ؟

أول شيء عليك فعله هو التأكد من أن لديك Windows Scripting Host. تم تضمينه في الأصل في W2K. إذا كنت تستخدم نظام التشغيل Windows 98 أو Internet Information Server 4.0، أو إذا قمت بتثبيت حزمة الخيارات لنظامي التشغيل Windows NT 4 وWindows 95، فمن المؤكد أنك تمتلكها. في حالة نظام التشغيل Windows 95، يصبح كل شيء أكثر تعقيدًا، ويجب تنزيل Windows Scripting Host من موقع Microsoft على الويب (msdn.microsoft.com/scripting). اكتب wscript في سطر الأوامر. إذا ظهر مربع حوار يتضمن شيئًا آخر غير "لم يتم العثور على الملف"، فكل شيء على ما يرام.

مايكروسوفت لا توفر محرر مرئيالبرامج النصية WSH. لكن المفكرة على ما يرام.

إنشاء وتشغيل البرامج النصية

بالمقارنة مع حيل البرمجة المختلفة، تعد كتابة البرامج النصية لـ Windows Scripting Host أمرًا بسيطًا نسبيًا. في برنامج "المفكرة"، تقوم بكتابة البرنامج النصي الخاص بك باستخدام الكائنات المذكورة. ثم احفظ الملف بالملحق .vbs لـ VBScript أو .js لـ JScript.

يعد تشغيل البرامج النصية أيضًا مهمة سهلة. هناك عدة طرق. أبسطها هو الأمر سلسلة دوسوما شابه ذلك نسخة ويندوزمضيف البرمجة النصية، CSCRIPT.EXE. يتيح لك هذا الإصدار التحكم في تنفيذ البرنامج النصي باستخدام معلمات سطر الأوامر.

تعمل خيارات المضيف على تمكين أو تعطيل العديد من الخيارات خيارات ويندوزمضيف البرمجة النصية وتكون دائمًا مسبوقة بشرطتين مائلتين (//). اسم البرنامج النصي هو دائمًا اسم الملف، ومعلمات البرنامج النصي هي المعلمات التي تم تمريرها إلى البرنامج النصي. تُسبق هذه المعلمات دائمًا بشرطة مائلة واحدة (/). يحتوي الجدول 4 على بعض معلمات CSCRIPT.EXE.

الجدول 4. خيارات سطر الأوامر CSCRIPT.EXE

إذا كنت لا تريد رؤية النوافذ التي تحتوي على زر "موافق"، فاستخدم cscript.exe، واستخدم أسلوب WScript.Echo لعرض الرسائل.

هناك ثلاث طرق لتشغيل البرامج النصية باستخدام wscript.exe.

أحدها هو النقر نقرًا مزدوجًا على الملف أو الرمز. الحل الآخر هو تحديد تشغيل... من القائمة "ابدأ" وكتابة اسم الملف بالكامل في مربع النص "فتح". أخيرًا، يمكنك تشغيل WSCRIPT.EXE نفسه من نفس Run...، مع إضافة اسم البرنامج النصي وأي من المعلمات الممكنة إليه.

مثال البرنامج النصي

دعونا نحاول كتابة بعض البرامج النصية في VBScript. مثال محدد، الموضح في القائمة 1، يتم توفيره بواسطة Microsoft ويمكن الحصول عليه (بالإضافة إلى العديد من المواقع الأخرى) من موقع WWW الخاص بهم: .

القائمة 1

" يوضح هذا المثال كيفية استخدام كائن WSHShell " لإنشاء اختصار على سطح المكتب. L_Welcome_MsgBox_Message_Text = _ "سيقوم هذا البرنامج النصي بإنشاء اختصار للمفكرة على سطح المكتب." L_Welcome_MsgBox_Title_Text = "مثال لمضيف البرمجة النصية لـ Windows "Call Welcome()" ************************************* ************************** * " * الطرق المرتبطة بالاختصارات. " *DimWSHShell Set WSHShell = WScript.CreateObject("WScript.Shell") Dim MyShortcut, MyDesktop, DesktopPath " اقرأ المسار إلى سطح المكتب DesktopPath = WSHShell.SpecialFolders("Desktop") " إنشاء اختصار على مجموعة سطح المكتب MyShortcut = WSHShell .CreateShortcut (DesktopPath & _ "\Shortcut to notepad.lnk") " قم بتعيين خصائص كائن الاختصار واحفظها MyShortcut.TargetPath = WSHShell.ExpandEnvironmentStrings _ ("%windir%\notepad.exe") MyShortcut.WorkingDirectory = WSHShell .ExpandEnvironmentStrings _ ( "%windir%") MyShortcut.WindowStyle = 4 MyShortcut.IconLocation = WSHShell.ExpandEnvironmentStrings _ ("%windir%\notepad.exe, 0") MyShortcut.Save WScript.Echo "يوجد الآن اختصار للمفكرة" على سطح المكتب." "*************************************************** *************** " * " * Welcome " * Sub Welcome() Dim intDoIt intDoIt = MsgBox(L_Welcome_MsgBox_Message_Text, _ vbOKCancel + vbInformation, _ L_Welcome_MsgBox_Title_Text) If intDoIt = vbCancel ثم ;WScript . قم بإنهاء النهاية إذا كانت النهاية الفرعية

يقوم هذا البرنامج النصي بإنشاء اختصار للمفكرة على سطح المكتب. أود أن أشير إلى أن مهامنا الآن لا تشمل تعليم المستخدمين كيفية البرمجة باستخدام VB أو Java. ومع ذلك، سيعطيك هذا المثال فكرة عما يمكن أن يفعله Windows Scripting Host ببعض مهارات البرمجة الأساسية.

حان الوقت الآن للانتقال إلى تطبيقات أكثر أهمية لـ WSH. من المحتمل أن يكون WSH مفيدًا جدًا للمسؤولين الذين سئموا من التكرار المنتظم لنفس الإجراءات. مسؤولي ويندوزلم يكن لدى NT قدرات مسؤولي UNIX، الذين كانوا يستخدمون البرامج النصية لعدة قرون. مع ظهور WSH، تغير الوضع، خاصة وأن WSH يسمح لك بالاستفادة من التقنيات الخارجية للغات البرمجة النصية، مثل Windows Management Instrumentation (WMI) وواجهة خدمات الدليل النشط (ADSI).

سنستخدم WMI وADSI، وأفترض أن لديك على الأقل فهمًا أساسيًا لهذه التقنيات. يمكنك الحصول على مزيد من المعلومات عنها على العناوين و

تفترض هذه الأمثلة أنك تستخدم W2K، أما بالنسبة للأنظمة الأساسية الأخرى فقد يتعين عليك تثبيت WMI وADSI.

استخدام WSH وWMI لإنشاء البرامج النصية لتسجيل الدخول

كما تعلم، فإن مثل هذه البرامج النصية تعني التشغيل في وقت البدء. تعرض القائمة 2 برنامج نصي للتمهيد يحدد نوع مستخدم تسجيل الدخول وينفذ المهام بناءً على تلك المعلومات.

القائمة 2

على استئناف الخطأالمجموعة التالية wshNetwork = WScript.CreateObject("WScript.Network") تعيين wshShell = WScript.CreateObject("WScript.Shell") تفعل بينما wshNetwork.username = "" مستخدم حلقة WScript.Sleep 250 = مجال wshNetwork.username = wshNetwork.userdomain Wscript.echo "تسجيل الدخول" & ucase(domain) & "\" & user & "..." " باستخدام ADSI نحصل على قائمة بالمجموعات التي ينتمي إليها المستخدم ADspath = "WinNT://" & domain & " /" & مجموعة المستخدم Adsobj = GetObject(adspath) "استدعاء إجراءات أخرى بناءً على النوافذمجموعة NT الخاصة بالمستخدم لكل خاصية في Adsobj.groups، حدد الحالة، حالة Prop.name، الحالة "Administrators"، استدعاء Adminslogon، الحالة "YourNewGroup"، استدعاء YourNewGrouplogon، النهاية، تحديد التالي

أولاً، يقوم البرنامج النصي بإنشاء بعض الكائنات الشائعة التي ستحتاج إلى استخدامها، مثل كائنات WScript.Network وWScript.Shell. ثم يستخدم هذه الكائنات لتحديد اسم المستخدم ومعلومات المجال. وأخيرًا، باستخدام البرنامج النصي ADSI، فإنه يقوم بإرجاع المعلومات التي تحتوي على مجموعة المستخدمين. يتم استخدام هذه المعلومات لتحديد الإجراء المناسب للاتصال بكل مجموعة مستخدمين. يتم ذلك عن طريق عبارة تحديد الحالة.

يستخدم البرنامج النصي للتمهيد لمستخدمي مجموعة Windows NT التي نقوم بإنشائها (تحت اسم YourNewGroup). فرص التواصل WSH. فهو يتحقق لمعرفة ما إذا كان الحرف Z قيد الاستخدام، وإذا كان مجانيًا، فسيتم تعيين محرك الأقراص Z إلى \\yourserver\NETLOGON باستخدام التنسيق \\server\share.

لشرح كيفية عمل البرنامج النصي للتمهيد، تم تضمين بعض الإجراءات والوظائف في نص المقالة. يمكنك ببساطة إعادتهم إلى مكانهم في المجموعة في القائمة 2.

تسجيل الدخول الفرعي إذا كان CheckNetworkMapping("z:"، "\\yourserver\NETLOGON") = خطأ، ثم MapNetwork "z:"، "\\yourserver\NETLOGON " ينتهي إذا كان end sub

تسرد وظيفة CheckNetworkMapping أحرف محركات الأقراص المختلفة لتحديد ما إذا كان حرف محرك الأقراص المحدد قيد الاستخدام (انظر القائمة 3). تقوم بإرجاع صحيح أو خطأ بناءً على توفر الحرف المحدد. إذا كان صحيحاً، يتم استدعاء روتين MapNetwork لإجراء التعيين. يستخدم هذا الروتين أسلوب MapNetworkDrive لكائن wshNetwork لتعيين الحرف المناسب لمورد الشبكة. أكثر معلومات كاملةيمكن الحصول على معلومات حول كائن wshNetwork من الجدول 3.

القائمة 3

"التحقق من وجود محرك أقراص الشبكة، إذا لم يكن الأمر كذلك، أضف " هذه الوظيفة تتحقق من وجود محرك أقراص الشبكة Function CheckNetworkMapping(DriveLetter) Dim Drive WScript.Echo "التحقق من وجود محرك أقراص شبكة معين" & DriveLetter CheckNetworkMapping = خطأ لكل محرك أقراص في wshNetwork.EnumNetworkDrives إذا كان LCase(Drive) = LCase(DriveLetter) ثم CheckNetworkMapping = True Exit For End إذا كان التالي إذا CheckNetworkMapping ثم WScript.Echo " محرك أقراص الشبكةتم العثور على "Else WScript.Echo" لم يتم العثور على محرك أقراص الشبكة "End If End Function" يربط هذا الروتين الفرعي حرفًا بدليل شبكة فرعي MapNetwork (حرف محرك الأقراص، netshare) عند استئناف الخطأ التالي err.clear WScript.Echo "تعيين محرك أقراص شبكة." wshNetwork.MapNetworkDrive حرف محرك الأقراص، netshare، صحيح إذا كان الخطأ 0 ثم "فشل الاتصال WScript.Echo "لا يمكن ربط " & حرف محرك الأقراص & " مع " & netshare else WScript.Echo "OK..." ينتهي إذا كان end sub

قد يريد المسؤولون المزيد معلومات مفصلةمن وصف موارد الشبكة وبيئة المستخدم. وقد يحتاجون إلى معلومات حول الكمبيوتر، مثل متغيرات البيئة وتكوين الكمبيوتر والأجهزة وما إلى ذلك. باستخدام فقط نموذج الكائن WSH سيوضح لك الكود التالي كيفية عرض بعض المعلومات حول بيئة جهاز الكمبيوتر الخاص بك والتسجيل.

Sub Adminslogon Wscript.Echo _ "يقوم هذا الإجراء بإرجاع قيم متغيرات البيئة الرئيسية لهذا الكمبيوتر" ReturnENV Wscript.Echo regProxy Wscript.Echo "يتطلب منك السطران التاليان إدخال الخادم واسم المستخدم وكلمة المرور Wscript.Echo "عناوين IP لهذا الكمبيوتر: " & GetIPAddress _ ("yourserver"، "administrator"، "p" - word") Wscript.Echo "إجمالي حجم ذاكرة الوصول العشوائي (RAM) على هذا الجهاز: " & GetRAM _("yourserver"، "administrator"، "p-word") end sub

تم تقديم هذا البرنامج النصي كمثال فقط - سيكون من التافه تخزين كلمة مرور المسؤول بنص واضح.

ماذا يمكنك أن تفعل بالأشياء التي تأتي مع WSH؟ على سبيل المثال، يمكنك الحصول على بعض المعلومات حول جهاز الكمبيوتر الخاص بك. يمكن القيام بذلك باستخدام طريقة ReturnENV. أولاً في هذه الطريقة، ستحتاج إلى توصيل wshProcEnv بـ بيئة العمل. قبل ذلك، تحتاج إلى إنشاء كائن wshShell (انظر البرنامج النصي أدناه). بمجرد الاتصال ببيئة العملية، يمكنك إرجاع بيانات مثل NUMBER_OF_PROCESSORS أو PATH لتكوين هذا الكمبيوتر. فيما يلي بعض الأمثلة على ما يمكنك استخراجه من بيئة العملية.

Sub ReturnENV() set wshShell = Wscript.CreateObject("WScript.Shell") set wshProcEnv = wshShell.environment("process") WScript.Echo ("NUMBER_OF_PROCESSORS: " & wshProcEnv _ ("NUMBER_OF_PROCESSORS")) WScript.Echo WScript. Echo("PROCESSOR_IDENTIFIER: " & wshProcEnv_("PROCESSOR_IDENTIFIER")) WScript.Echo WScript.Echo("OS: " & wshProcEnv("OS")) WScript.Echo WScript.Echo("PATH: " & wshProcEnv("PATH " )) WScript.Echo WScript.Echo ("WINDIR: " & wshProcEnv ("WINDIR")) WScript.Echo end sub

يرجى ملاحظة أن هذا البرنامج النصي يعمل بكامل طاقته فقط في بيئة NT (أو W2K). في WindowsK9x، سيكون PATH وWINDIR فقط متاحين.

أنت تعلم بلا شك أن الإجراءات غير الكفؤة، والأكثر مهارة، في السجل يمكن أن تدمر أي نظام تشغيل من Microsoft بسرعة وبشكل لا رجعة فيه. لأتمتة هذه العملية، يوفر WSH طريقة سهلة لإدارة السجل. باستخدام أساليب RegRead وRegWrite وRegDelete، يمكنك القيام بكل ما تريد. كل ما هو مطلوب هو الإشارة المفتاح الصحيحللقراءة أو الكتابة أو الحذف.

لنحاول إعداد خادم وكيل كمثال. يمكنك الحصول على المعلومات الحالية المخزنة في السجل في HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer باستخدام طريقة RegRead. وبعد ذلك، باستخدام RegWrite، سنعيد كتابة هذه القيمة باسمنا، وهو اسم بعض خوادم الوكيل لديك، MYPROXY:80. أخيرًا، دعونا نتأكد من أننا قمنا بتدوين المعلومات الصحيحة، والتي نحسب قيمتها مرة أخرى باستخدام RegRead.

بادئة regProxy الفرعية = "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet إعدادات\" WScript.Echo "إعدادات الخادم الوكيل القديم:" & wshShell.RegRead(prefix & _ "ProxyServer") wshShell.regWrite بادئة و"ProxyServer"، "MYPROXY:80" WScript.Echo "إعدادات الخادم الوكيل الجديد:" & wshShell.RegRead(prefix & _ "ProxyServer") end sub

مع WMI يمكنك جمع الكتلة معلومات مثيرة للاهتمام. تستخدم وظيفة GetIPAddress WMI لتحديد عنوان IP الخاص بالجهاز. لن أخوض في التفاصيل حول WMI هنا، ولكن في الأساس يأخذ أمر GetObject كائن تحكم WMI. يحتوي هذا الكائن على أسلوب ExecQuery الذي يأخذ وسيطة نصية تصف عنوان IP وتقوم بإرجاع مجموعة من كافة عناوين IP الخاصة بالجهاز.

يشبه GetRAM إلى حد كبير GetIPAddress فيما عدا أن السلاسل المطلوبة مختلفة. كما في الحالة السابقة، يوجد ExecQuery قيد التشغيل في كائن خدمة WMI المرتبط. توضح القائمة 4 تنفيذ GetIPAddress وGetRAM.

القائمة 4

تعيين وظيفة GetIPAddress (الخادم، اسم المستخدم، كلمة المرور) objLocator = WScript.CreateObject("WbemScripting.SWbemLocator") تعيين objService = objLocator.ConnectServer (الخادم، ""، اسم المستخدم، كلمة المرور) strQuery = _ "حدد IPAddress من Win32_NetworkAdapterConfiguration حيث IPEnabled=TRUE "قم بتعيين objEnumerator = objService.ExecQuery(strQuery) لكل كائن في objEnumerator إذا لم يكن IsNull(obj.IPAddress) ثم من i=LBound(obj.IPAddress) إلى UBound(obj.IPAddress) GetIPaddress = obj.IPAddress(i) في النهاية التالية إذا تم تعيين وظيفة النهاية التالية GetRAM (الخادم، اسم المستخدم، كلمة المرور) objLocator = WScript.CreateObject("WbemScripting.SWbemLocator") set objService = objLocator.ConnectServer (الخادم، اسم المستخدم، كلمة المرور) strQuery = "حدد TotalPhysicalMemory من Win32_LogicalMemoryConfiguration" set objEnumerator = objService.ExecQuery(strQuery) لكل كائن في objEnumerator GetRam = obj.totalPhysicalMemory وظيفة النهاية التالية

لإكمال البرنامج النصي، احفظ التعليمات البرمجية في ملف logon.wsf (أو أي ملف تفضله). يجب وضعه في \\server\NETLOGON. هذا هو الدليل الذي سيستخدمه Windows NT عند البحث عن ملفات مثل البرامج النصية للتمهيد. لاحظ أن الخوادم غير W2K قد لا تقوم بتنفيذ ملفات أخرى غير ملفات الأوامر وملفات BAT. في هذه الحالة سيكون عليك كتابة logon.bat بسيط يستدعي cscript.exe.

قد يكون من الحكمة استبدال وظيفتي WMI في القائمة 4 بمكونات Windows Script.

WSH وواجهات خدمة الدليل النشط (ADSI)

يعمل Active Directory ضمن نظام التشغيل Windows 2000. لكن تطبيقات العميل، في حالتنا هذه، يمكن أيضًا تشغيلها ضمن نظام التشغيل Windows 95 أو Windows 98 أو Windows NT 4.0. بالنسبة لجميع أنظمة التشغيل هذه، هناك مكونات عميل تعتبر مهمة معلومات إضافية، يمكن الحصول عليها من موقع MSDN WWW (انظر العنوان أعلاه).

الآن بعد أن أصبح لديك برنامج نصي للتمهيد، يبقى أن تفهم سبب حاجتك إليه؟ تخيل أنك اضطررت إلى إنشاء 5000 حساب مستخدم لشركتك بالأمس كالعادة! لا مشكلة! سنوضح لك الآن كيفية إنشاء مجموعات المستخدمين والحسابات مستخدمي ويندوز NT، وكيفية الإيداع المستخدمين المناسبينإلى المجموعات الصحيحة.

إذا نظرت إلى أسماء المستخدمين والمجموعات الخاصة بخادم NT الخاص بك، فمن السهل أن ترى أن هناك العديد من المجموعات التي تم إنشاؤها مسبقًا، مثل المسؤولين ومستخدمي المجال. من السهل إنشاء مجموعتك الخاصة على خادم أو مجال. كل ما هو مطلوب هو الإشارة إلى جهاز الكمبيوتر الذي يعمل بنظام التشغيل Windows NT والذي ستقوم بإنشاء المجموعة عليه واسم المجموعة. يعرض الكود أدناه مثالاً لوظيفة CreateGroup التي تقوم بإنشاء مثل هذه المجموعة. للحصول على مرجع لكائن يمكن استخدامه لإدارة Active Directory، استخدم الدالة GetObject. باستخدام الكائن المستلم من GetObject، يمكنك إضافة مجموعة بالاسم الذي تحتاجه ووصفه. السطر المهم من التعليمات البرمجية هو SetInfo، الذي يقوم بتخزين المعلومات على الخادم:

إنشاء مجموعة فرعية (اسم الخادم، اسم المجموعة، GroupDesc) عند استئناف الخطأ، مجموعة err.clear التالية objServer = GetObject("WinNT://" & ServerName) set objGroup = objServer.Create("group"، GroupName) objGroup.Description = GroupDesc ​​​​objGroup.SetInfo إذا أخطأ users1.csv.بعد ذلك، بدأ عرض جميع سمات اللغة الروسية بشكل طبيعي.

وفي الختام بعض النقاط المهمة:

لتشغيل الأمر cmdlet جديد ADUserيجب عليك أولاً استيراد وحدة Active Directory لـ PowerShell. يتم ذلك من خلال فريق وحدة الاستيراد ActiveDirectory،يمكنك فقط لصق هذا السطر في البرنامج النصي . الاستثناء هو عند تشغيل البرنامج النصي من أداة إضافية خاصة " الوحدة النشطةالدليل لنظام التشغيل Windows PowerShell".

وحدة ActiveDirectory متاحة على الخوادم التي تعمل بنظام التشغيل Windows Server 2008R2/2012، وكذلك على محطات عمل Windows 7/8 الحزمة المثبتةإدارة RSAT.

تتطلب وحدة ActiveDirectory خدمة Active Directory Web Service (ADWS)، التي توفر واجهة ويب للوصول إلى خدمة الدليل. افتراضيًا، يتم تثبيت هذه الخدمة تلقائيًا عند إضافة أدوار خادم AD DS وAD LDS على الخوادم التي تعمل بنظام التشغيل Windows Server 2008R2 والإصدارات الأحدث. بالنسبة لنظام التشغيل Windows Server 2003\2008، يمكن تثبيت هذه الخدمة بشكل منفصل عن طريق التنزيل

يمر البرنامج النصي عبر جميع الخوادم من Active Directory، وينظر إلى التكوين المجموعة المحليةالمسؤولين ويحفظ القائمة في ملف. سيكون مفيدًا للحفاظ على الأمن في بيئة بها كمية كبيرةالخوادم.

مثال البرنامج النصي وصف البرنامج النصي
1 - 4 نحدد المتغيرات لمزيد من الاستخدام.
1 المسار إلى الملف حيث سيتم حفظ النتيجة.
2 حاوية في Active Directory تحتوي على حسابات كمبيوتر الخادم.
3 نقوم أيضًا بإنشاء مصفوفة تجزئة. في Powershell، يجب القيام بذلك قبل البدء في استخدامه.
4 إنشاء متغير فارغ. سنقوم بملئها بقائمة المستخدمين الأعضاء في مجموعة المسؤولين.
6 - 21 وظيفة البحث عن المستخدمين في مجموعة المسؤولين.
7 سيتم تمرير اسم الخادم إلى الوظيفة. سنقوم بحفظه في المتغير $strcomputer
8 - 12 نقوم بإنشاء استثناء للعملية التي يتم تنفيذها. إذا لم يتم إكمال الطلب بشكل صحيح، فسيتم عرض اسم الخادم على الشاشة.
9 نقوم بالوصول إلى كائن win32_groupuser في WMI من خلال قائمة مجموعات Windows.
11 إذا فشل الاتصال بـ WMI (في أغلب الأحيان بسبب عدم توفر RPC)، فسيتم عرض اسم الخادم الذي يتم الاتصال به حاليًا على الشاشة.
13 الشرط الذي يتم بموجبه التحقق من وجود المتغير مع قائمة المجموعات التي تم الحصول عليها في السطر 9
14 نقوم بإنشاء متغير يتضمن قائمة مستخدمي مجموعة المسؤولين أو المسؤولين (على الخوادم ذات الإصدار الإنجليزي).
15 - 18 نقوم بإزالة المستخدمين من المجموعة الإدارية وحذف معلومات الخدمة غير الضرورية.
19 تقوم الدالة بإرجاع قائمة المستخدمين.
23 نقوم بإنشاء متغير ونضع فيه قائمة بأجهزة الكمبيوتر التي سنبحث فيها عن المسؤولين. في هذا المثال، هذه هي أجهزة الكمبيوتر من Active Directory.
24 - 29 نقوم باستخراج الخوادم واحدًا تلو الآخر التي تم الحصول عليها في السطر 23.
25 نقوم بتشغيل الوظيفة وتمرير اسم الخادم لها. تتم كتابة نتيجة العمل إلى متغير UserList $
26 يتحقق الشرط من وجود قيمة في المتغير $UserList
27 إذا كانت هناك قائمة بالمستخدمين، فأضفها إلى مصفوفة $AdminList
31 - 35 نمر عبر مصفوفة $AdminList ونضيفها إلى قائمة الخوادم والمسؤولين عنها.
32 نقوم بإنشاء متغير نكتب فيه اسم الخادم.
33 نقوم بإنشاء متغير نضع فيه قائمة المستخدمين للخادم من السطر 32.
34 يحتوي المتغير $ToCSV على أسطر للملف المستقبلي. يمثل كل سطر اسم الخادم وقائمة المسؤولين، مفصولة بفاصلة منقوطة.
37 - 39 نتحقق من وجود الملف في النظام الذي نريد وضع نتيجة البرنامج النصي فيه. إذا كان الملف موجودا، قم بحذفه.
41 نقوم بإنشاء ملف تحميل ونضع فيه قائمة بالمسؤولين.

في جدا نسخة بسيطةيستغرق إنشاء حساب مستخدم جديد حوالي دقيقتين. افتح الأداة الإضافية "Active Directory - المستخدمون وأجهزة الكمبيوتر"، وانتقل إلى الوحدة التنظيمية المطلوبة (OU)، وحدد جديد - مستخدم من القائمة، وأدخل اسم المستخدم وكلمة المرور. هذا كل شيء، الحساب جاهز، يمكنك العمل.
تخيل الآن أنه بهذه الطريقة لا تحتاج إلى إنشاء حساب واحد، ولكن، على سبيل المثال، 50 حسابًا، وقم بذلك بانتظام.

نظرًا لأنه من غير المحتمل أن يحب أي شخص قضاء بعض الوقت في كتابة بيانات اعتماد المستخدم بغباء، فإننا نخلص إلى نتيجة بسيطة - يجب أن تكون عملية إنشاء المستخدمين آلية. وسوف يساعدنا PowerShell في هذا.

لذا، تخيل أننا بحاجة ماسة إلى إنشاء 50 حسابًا من نفس النوع. لنكتب السيناريو التالي:


اسم المستخدم $="طالب"
عدد الدولارات=1..50
foreach ($i في $count)
( New-AdUser -Name $username$i -Path $org -passThru )

نقوم بتشغيل البرنامج النصي، ويتم إنشاء 50 مستخدمًا بأسماء Student1-student50 في قسم الطلاب. بشكل افتراضي، يتم إنشاء الحسابات معطلة، وسيظل المستخدمون مجبرين على الاتصال بك لتنشيطها. دعونا نحاول تجنب هذا:


اسم المستخدم $="طالب"
عدد الدولارات=1..50
foreach ($i في $count)

-AccountPassword (ConvertTo-SecureString "p@$$w0rd" -AsPlainText -force) -passThru)

هنا نقوم بإنشاء حسابات نشطة بالفعل وتعيينها ص@$$w0rdككلمة المرور الافتراضية، كما تشير أيضًا إلى تغييرها عند تسجيل الدخول لأول مرة إلى النظام. لتجنب إرسال كلمة المرور بنص واضح، نستخدم الأمر cmdlet تحويل إلى SecureString، الذي يحول سلسلة نصية إلى تنسيق محمي

الآن دعونا نجعل نصنا أكثر مرونة قليلاً. باستخدام الأمر cmdlet قراءة المضيفلنجعل البرنامج النصي الخاص بنا يطلب اسم وعدد المستخدمين:

$org=″OU=الطلاب,DC=contoso,DC=com″


$count=1..$number
foreach ($i في $count)
( مستخدم AdUser الجديد -Name $username$i -Path $org

تم إنشاء الحسابات ويمكن للمستخدمين تسجيل الدخول والعمل. الآن يجب تكوينها - إضافتها إلى مجموعات الأمان، وتسجيلها في الدليل الرئيسي، والبرامج النصية لتسجيل الدخول، وما إلى ذلك. يمكنك القيام بذلك باستخدام القالب. ببساطة، نقوم بإنشاء حساب قالب، وتخصيصه بالكامل، ثم إجراء العدد المطلوب من النسخ منه باستخدام المعلمة -مثال :

قالب $ = Get-AdUser -Identity "student"
$org=″OU=الطلاب,DC=contoso,DC=com″
$username=Read-Host "أدخل الاسم"
$number=مضيف القراءة "أدخل الرقم"

$count=1..$number
foreach ($i في $count)
( New-AdUser -Name $username$i -UserPrincipalName $username$i -Path $org -Instance `
قالب $ -تمكين $True -ChangePasswordAtLogon $true`
-AccountPassword (ConvertTo-SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru)

هناك طريقة أخرى لأتمتة إنشاء الحساب وهي استيرادها من ملف CSV. هذا سوف تعمل الطريقةفي حال تم تزويدك بقائمة المستخدمين، ويحتاجون إلى إنشاء حسابات وفقًا لهذه القائمة. كقاعدة عامة، يتم إنشاء هذه القوائم في Excel على شكل جدول يحتوي على أعمدة الاسم والمنصب والقسم وما إلى ذلك، كما يلي:

مهمتنا هي حفظه بتنسيق CSV ثم تحديده في البرنامج النصي باستخدام الأمر cmdlet استيراد-CSV.إذا كان ملف CSV الخاص بك يحتوي على جميع الأعمدة المطلوبة، إذن جديد ADUser سيتم ربطها تلقائيًا بسمات المستخدم الصحيحة:

$csv = استيراد-CSV - المسار ″C:\scripts\users.csv″
$CSV | مستخدم AdUser الجديد - المسار $org -تمكين $True -ChangePasswordAtLogon $true`
-AccountPassword (ConvertTo-SecureString ″p@$$w0rd″ -AsPlainText -force) -passThru

بهذه الطريقة يمكنك استيراد مئات المستخدمين الجدد في ثوانٍ معدودة، ولكن هناك عيوب في هذه الطريقة:

  • يجب أن تتطابق أسماء الأعمدة تمامًا مع أسماء سمات المستخدم، على سبيل المثال الاسم والمؤسسة والعنوان، وإلا فلن يعمل أي شيء. يمكن الاطلاع على القائمة الكاملة للسمات.
  • يجب عليك تحديد SamAccountName في الجدول، وإلا ستتلقى خطأ يفيد بأن الحساب موجود بالفعل.
  • إذا تم تعيين السمات في التخطيط الروسي، كما هو الحال في مثالنا، فقد تنشأ مشاكل في الترميز. ما ساعدني في حل هذه المشكلة هو استخراج محتويات ملف CSV باستخدام أمر cmdlet الحصول على المحتوىوحفظه في ملف CSV آخر: الحصول على المحتوى users.csv >> users1.csv.بعد ذلك، بدأ عرض جميع سمات اللغة الروسية بشكل طبيعي.

ونقطة أخرى مهمة: تشغيل الأمر cmdlet جديد ADUserيجب عليك أولاً استيراد وحدة Active Directory لـ PowerShell. يتم ذلك من خلال فريق وحدة الاستيراد ActiveDirectory،يمكنك فقط لصق هذا السطر في البرنامج النصي . الاستثناء هو عند تشغيل البرنامج النصي من وحدة Active Directory الخاصة بالأداة الإضافية Windows PowerShell.