مهدی رزمجویی
توسعه دهنده SQL و PHP علاقه مند به مهندسی معکوس

آموزش ایجاد تعداد زیادی یوزر در اکتیودایرکتوری (AD) با پاورشل

سلام به همه بچه های ITPro، تو این آموزش میخوام با کمک دستورات Powershell تعداد زیادی یوزر به اکتیو دایرکتوری اضافه کنم .توی پاورشل دستورات به این صورت هست که اگه بخوایم شی جدید ایجاد کنیم اون دستور با new شروع میشه، اگه بخوایم شی اضاف کنیم دستور با Add شروع میشه، Remove واسه پاک کردن و ... مثلا واسه ایجاد یه OU جدید از دستور New-ADOrganizationUnit یا واسه حذف OU از Remove-ADOrganizationalUnit استفاده میکنیم. زمانی که دستور توی پاورشل اجرا میکنیم ،پاورشل تنها زمانی به ما پیغام نشون میده که دستور اجرا نمیشه پس هروفت دستورمون کامل اجرا شد چیزی نشون نمیده .خوب در ابتدا با چند تا دستور آشناتون میکنم بعد شروع میکنیم به برنامه نویسی تو محیط پاورشل .

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
سرفصل های این مطلب
  1. دستور ساخت User
وب سایت توسینسو
  1. New-ADUser : اضافه کردن یه یوزر جدید
  2. Remove-ADUser : حذف یوزر مورد نظر
  3. New-ADGroup : اضافه کردن یه گروه جدید
  4. Remove-ADGroup : حذف گروه مورد نظر
  5. Set-ADUser : ست کردن مقادیر جدید واسه یوزر مورد نظر
  6. Set-ADGroup : تغییر مشخصات گروه مورد نظر
  7. Get-Help : کمک گرفتن از powershell
  8. Set-ExecutionPolicy : تنظیم کردن ExecutionPolicy (این دستور در ادامه توضیح میدم)
  9. Get-ExecutionPolicy : گرفتن مقدار تنظیم شده ExecutionPolicy
  10. Set-ADAccountPassword : ست کردن رمزعبور واسه یوزر

دستور ساخت User

وب سایت توسینسو

همه دستور پشت سر هم تایپ کنید بعد کلید Enter بزنید .اسم فارست من WolfSecTeam.com هست و دوتا OU بنام Wolfuser و WolfComputer توی اکتیو دایرکتوری درست کردم که کامپیوترها توی WolfComputer هست و یوزرها هم توی WolfUser ، خوب حالا دستور بالا یه یوزر به نام mina mansuri توی WolfUser ایجاد میکنه .

  • Name- : نام یوزر
  • DisplayName- : نام نمایشی یوزر
  • GivenName- : اسم کوچک یوزر
  • Surname- : نام خانوادگی یوزر
  • PasswordNeverExpires- : یعنی میخوایم پسورد تاریخ انقضا داشته باشه یا نه .
  • ChangePasswordAtLogon- : یعنی موقعی که یوزر واسه اولین بار وارد میشه پسوردشو تغییر بده یا نه .
  • AccountPassword- : پسورد یوزر
  • Path- : مسیر جایی که میخوایم این یوزر اونجا ساخته بشه
  • Enabled- : یعنی موقعی که یوزر ساخته میشه، اکانت کاربریش فعال باشه یا نه .
  • SamAccountName- : نام کاربری که یوزر با اون وارد ویندوز میشه .
  • UPN : -UserPrincipalName یوزر

خوب حالا که با چند تا دستور آشنا شدید می یایم و با استفاده از powershell یه برنامه مینویسیم، که یه فایل بعنوان ورودی میگیره و اتوماتیک تمام یوزرها رو ایجاد میکنه .این ورودی فقط شامل نام و نام خانوادگی یوزرهاست .یه مثال میزنم، من میخوام 10 تا یوزر اتوماتیک اضافه کنم به اکتیو دایرکتوری . این مقادیر ورودی هست که توی یه فایل ذخیره شده به نام fname_lname.txt :

وب سایت توسینسو

و اینم کد برنامه که توی فایلی به نام get__user.ps1__ ذخیره شده (ps1 فرمت فایل های پاورشل هست ) فقط باید خط 16 و 17 توی کد بهم بچسبونید (17 ادامه 16 هست، چون این دو خط باید توی یه خط پشت سرهم باشن و بخاطر این که تمام کدها تو عکس بیوفته من توی دو خط نوشتم )

وب سایت توسینسو

توضیح کد:

موقعی که میخوایم یه متغیر توی پاور شل تعریف کنیم ابتدای اون $ میزاریم. خود پاورشل دارای چند تا متغیر از پیش تعریف شده هم هست مثل false$ یا true$ .واسه توضیحات از # استفاده میشه .

  • Read-Host : این دستور یه ورودی از یوزر میگیره .
  • AsSecureString- : این سوییچ واسه اینکه که هر کاراکتری که یوزر وارد میکنه تبدیلش کنه به ستاره ( امنیت رمزعبور بالا میره مثلا اگه کسی پیش یوزر باشه نمیتونه بفهمه یوزر چی وارد میکنه )
  • "p@ssw0rd" : یه متن نمایشی (توی عکس هنگام اجرای کد معلومه)
  • Verbose- : برعکس AsSecureString هست، یعنی کاراکترای وارد شده بصورت معمولی نمایش میده .
  1. خط اول کد رمزعبور یوزر میپرسه (واسه ساخت یوزر) 
  2. خط دوم هم یه اسم از یوزر میپرسه به عنوان اسم OU ی که میخوایم یوزرها اونجا ساخته بشن
  3. خط سوم یه شمارنده هست (موقعی که کدمون اجرا میکنیم و یوزرها ساخته میشن، برنامه به ما یه خروجی میده که میگه این یوزرها اضافه شدن به AD، این شمارنده فقط واسه چاپ شماره ردیف یوزر ساخته شده هست )
  4. خط چهارم یه OU برای ما میسازه
  5. خط پنجم یه حلقه گذاشتم که تمام مقادیر fname_lname.txt میخونه و خط به خط توی متغیر tmp$ میریزه .
  6. split : این تابع نسبت به ورودی جداکنندش که ; هست مقادیر از از هم جدا میکنه (یعنی اگه مقدار mohammad;razmi ورودی تابع باشه mohammad از razmi جدامیکنه )
  7. @ : هروقت بخوایم آرایه تعریف کنیم از این کاراکتر استفاده میکنیم .
  8. خط هشتم مقادیر توی tmp$ میریزه توی آرایه name$ .
  9. خط نهم خونه اول آرایه name$ توی متغیر fname$ میریزه .
  10. خط دهم خونه دوم آرایه name$ توی متغیر lname$ میریزه .

ما یه قانون برای خودمون گذاشتیم که نام کاربری یوزر اینجوری تولید میشه که میایم کاراکتر اول اسم کوچک بهمراه نام خانوادگی بهم میچسبونیم میشه نام کاربری .

  • (Substring(0,1 : تابعی هست که نسبت به ورودیش کاراکتر جدا میکنه

خط یازدهم : تابع Substring میاد از کاراکتر صفرم به تعداد یک کاراکتر (که میشه کاراکتر اول fname$ ) برای ما برمیگردونه و میریزه توی متغیر finitial$ .

خط دوازدهم : مقدار متغیر item$ میچسبونه به کاراکتر ( و بعد میچسبونتش به fname$ و چند تا فاصله و lname$ .

"n`" : این کاراکتر عمل enter واسه ما توی چاپ انجام میده (یعنی میخوایم بعد از اینکه برنامه اجرا شد خروجی بصورت زیر باشه)

وب سایت توسینسو

ولی اگه "n`" از آخر کد حذف کنیم خروجی بصورت زیر نمایش داده میشه

وب سایت توسینسو

خط سیزدهم : مقدار متغیر finitial$ و lname$ را به هم میچسبونه و میریزه توی متغیر user$ (به عنوان نام کاربری یوزر)

خط چهاردهم : متغیر user$ به wolfsecteam.com@ میچسبونه و UPN تشکیل میده .

خط پانزذهم : مسیر ساخت یوزر ها

خط شانزدهم هم که دستور ساخت یوزر هست .

و در آخر خط هجدهم هم یه خروجی واسه ما چاپ میکنه که میگه این یوزر ها اضافه شدن به Active Directory

فقط یه نکته باقی میمونه و اونم اینکه پاورشل بصورت پیشفرض اجازه اجرای هیچ کدی روی سرور نمیده (این یه فیچر امنیتی هست) مگه اینکه تنظیمات پیشفرضشو تغییر بدیم بصورت زیر :

اگه بخوایم بدونیم پیشفرض پاورشل واسه اجرای کد چیه، از دستور Get-ExecutionPolicy که قبلاً ذکر کردم استفاده میکنیم .

وب سایت توسینسو

که پیشفرض Restricted هست و اگه بخوایم کدمونو اجرا کنیم با خطا روبه رو میشیم .

وب سایت توسینسو

حالا چند تا از مقادیری که میشه بجای این مقدار ست کنیم براتون توضیح میدم .

1) اگه ExecutionPolicy با مقدار Unrestricted ست کنیم یعنی اجازه اجرای هرکدی داریم حالا اون کد میتونه توسط یه ناشر معتبر تایید شده باشه (تایید بشه یعنی یه ناشر معتبر روی کد امضای دیجیتال بزاره) یا هم تایید نشده باشه یا اینکه خودمون اون کد بنویسیم، در هرصورت هر کدی اجازه اجراشدن داره .

2) RemoteSigned : بهترین گزینه واسه ست کردن این مقدار هست ، موقعی که این مقدارو ست میکنیم پاورشل اجازه اجرای کدهای معتبر(دارای امضای دیجیتال) میده حتی کدهایی که خودمون اونارو نوشتیم هم اجازه اجرا دارن ولی کدهای که امضای دیجیتال ندارن اجازه اجرا ندارن .

3) AllSigned : اگه این مقدارو ست کنیم فقط کدهایی که امضای دیجیتال دارن اجازه اجرا شدن دارن حتی کدی هم که خودمون نوشتیم هم اجازه اجرا ندارن .

پس درنتیجه ExecutionPolicy با RemoteSigned ست میکنیم که بهتزن گزینه هست .

وب سایت توسینسو

و حالا میتونیم کدی که نوشتیم اجرا کنیم و نتیجه رو ببینیم .

وب سایت توسینسو

برنامه یه OU به نام ITUser برای ما ایجاد کرد و یوزرهارو توی اون OU ساخت .

اینم نتیجه پایانی

وب سایت توسینسو

امیدوارم این آموزش براتون مفید بوده باشه .

نویسنده : مهدی رزمجویی

منبع : انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد


مهدی رزمجویی
مهدی رزمجویی

توسعه دهنده SQL و PHP علاقه مند به مهندسی معکوس

توسعه دهنده C# ، ++C ، PHP ، SQL ، محقق بدافزار ، توسعه دهنده آنتی ویروس پادویش ، توسعه دهنده آزمایشگاه بدافزار ، علاقمند به مهندسی معکوس

نظرات