نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • جالب هست
  • استفاده از Get-ADUser برای به دست آوردن اطلاعات مختلف در مورد کاربران دامنه AD. اسکریپت برای تخلیه همه کاربران از MS Active Directory (ITGC)

استفاده از Get-ADUser برای به دست آوردن اطلاعات مختلف در مورد کاربران دامنه AD. اسکریپت برای تخلیه همه کاربران از MS Active Directory (ITGC)

اختصاص داده شده به استفاده از PowerShell برای مدیریت AD. به عنوان یک نقطه شروع، نویسنده تصمیم گرفت 10 وظیفه معمول مدیریت AD را انجام دهد و ببیند چگونه می توان آنها را با استفاده از PowerShell ساده کرد:

  1. رمز عبور کاربر را بازنشانی کنید
  2. اکانت ها را فعال و غیرفعال کنید
  3. باز کردن قفل حساب کاربری
  4. اکانت خود را حذف کنید
  5. گروه های خالی را پیدا کنید
  6. کاربران را به یک گروه اضافه کنید
  7. لیست اعضای گروه
  8. حساب های کامپیوتری قدیمی را پیدا کنید
  9. اکانت کامپیوتر را غیرفعال کنید
  10. کامپیوترها را بر اساس نوع پیدا کنید

علاوه بر این، نویسنده یک وبلاگ دارد (البته با استفاده از PowerShell)، توصیه می کنیم نگاهی بیندازید - jdhitsolutions.com/blog. و می توانید به روزترین اطلاعات را از توییتر او دریافت کنید twitter.com/jeffhicks.
بنابراین، در زیر ترجمه مقاله “10 کار برتر اکتیو دایرکتوری حل شده با PowerShell” آورده شده است.

مدیریت اکتیو دایرکتوری (AD) با استفاده از Windows PowerShell ساده تر از آن چیزی است که فکر می کنید، و من می خواهم آن را به شما ثابت کنم. شما به سادگی می توانید اسکریپت های زیر را بردارید و از آنها برای حل تعدادی از وظایف مدیریت AD استفاده کنید.

الزامات

برای استفاده از PowerShell برای مدیریت AD، باید چندین الزام را رعایت کنید. من قصد دارم نحوه کار cmdlet های AD را با استفاده از یک کامپیوتر ویندوز 7 به عنوان مثال نشان دهم.
برای استفاده از cmdlet ها، باید یک دامین کنترلر Windows Server 2008 R2 داشته باشید، یا می توانید سرویس دروازه مدیریت Active Directory را در DC های قدیمی دانلود و نصب کنید. لطفا قبل از نصب، مستندات را به دقت مطالعه کنید. راه اندازی مجدد سی دی مورد نیاز است.
در سمت کلاینت، (RSAT) را برای ویندوز 7 یا ویندوز 8 دانلود و نصب کنید. در ویندوز 7، باید در را باز کنید کنترل پنل هافصل برنامه هاو انتخاب کنید ویژگی های ویندوز را روشن یا خاموش کنید. پیدا کردن ابزارهای مدیریت سرور از راه دورو بخش را گسترش دهید ابزارهای مدیریت نقش. موارد مناسب را برای AD DS و AD LDS Tools انتخاب کنید، به خصوص توجه داشته باشید که مورد باید انتخاب شود ماژول Active Directory برای Windows PowerShellهمانطور که در شکل 1 نشان داده شده است. (در ویندوز 8 همه ابزارها به طور پیش فرض انتخاب می شوند). اکنون آماده کار هستیم.

شکل 1 فعال کردن ابزارهای AD DS و AD LDS

من با یک حساب کاربری با حقوق سرپرست دامنه وارد شده ام. اکثر cmdlet هایی که نشان خواهم داد به شما امکان می دهند اعتبارنامه های جایگزین را مشخص کنید. در هر صورت توصیه می کنم راهنما را بخوانید ( کمک بگیر) و نمونه هایی که در زیر نشان خواهم داد.
یک جلسه PowerShell را شروع کنید و ماژول را وارد کنید:

PS C:\> Import-Module ActiveDirectory

واردات یک PSDrive جدید ایجاد می کند، اما ما از آن استفاده نخواهیم کرد. با این حال، می توانید ببینید که چه دستوراتی در ماژول وارد شده در دسترس هستند.

PS C:\> get-command -module ActiveDirectory

زیبایی این دستورات این است که اگر بتوانم از یک دستور روی یک شی AD استفاده کنم، می توان از آن روی 10، 100 و حتی 1000 استفاده کرد. بیایید ببینیم برخی از این cmdlet ها چگونه کار می کنند.

وظیفه 1: رمز عبور کاربر را بازنشانی کنید

بیایید با یک کار معمولی شروع کنیم: بازنشانی رمز عبور کاربر. شما می توانید این کار را به راحتی و با استفاده از cmdlet انجام دهید Set-ADAccountPassword. بخش مشکل این است که رمز عبور جدید باید به عنوان یک رشته محافظت شده واجد شرایط باشد: یک قطعه متن که رمزگذاری شده و در حافظه برای مدت زمان جلسه PowerShell ذخیره می شود. ابتدا بیایید یک متغیر با رمز عبور جدید ایجاد کنیم:
PS C:\> $new=Read-Host "رمز عبور جدید را وارد کنید" -AsSecureString

سپس یک رمز عبور جدید وارد کنید:

اکنون می توانیم اکانت (با استفاده از samAccountname– بهترین گزینه) و یک رمز عبور جدید تنظیم کنید. در اینجا یک مثال برای کاربر جک فراست آورده شده است:

PS C:\> Set-ADAccountPassword jfrost -NewPassword $new

متأسفانه، یک اشکال در این cmdlet وجود دارد: -پاسترو, -چه می شود اگر، و -تاییدکار نمی کند. اگر میانبر را ترجیح می دهید، این را امتحان کنید:

PS C:\> Set-ADAccountPassword jfrost -NewPassword (ConvertTo-SecureString -AsPlainText -String "P@ssw0rd1z3" -force)

در نتیجه، من باید دفعه بعد که جک وارد سیستم می شود رمز عبور خود را تغییر دهد، بنابراین با استفاده از حساب کاربری را تغییر می دهم Set-ADUser.

PS C:\> Set-ADUser jfrost -ChangePasswordAtLogon $True

نتایج اجرای cmdlet روی کنسول نوشته نمی شود. اگر لازم است این کار انجام شود، استفاده کنید -درست است، واقعی. اما من می توانم با بازیابی نام کاربری با استفاده از cmdlet بفهمم که آیا عملیات موفقیت آمیز بوده است یا خیر Get-ADUserو مشخص کردن ملک رمز عبور منقضی شده است، همانطور که در شکل 2 نشان داده شده است.


برنج. 2. نتایج Get-ADUser Cmdlet با ویژگی PasswordExpired

خط آخر: بازنشانی رمز عبور کاربر با استفاده از PowerShell به هیچ وجه دشوار نیست. اعتراف می کنم که بازنشانی رمز عبور نیز از طریق اسنپ آسان است کاربران و رایانه های Active Directoryکنسول ها کنسول مدیریت مایکروسافت (MMC).اما استفاده از PowerShell در صورتی مناسب است که شما نیاز به تفویض یک کار دارید، نمی‌خواهید Snap-in فوق الذکر را اجرا کنید یا یک رمز عبور را به عنوان بخشی از یک فرآیند بزرگ IT خودکار تنظیم می‌کنید.

وظیفه 2: فعال و غیرفعال کردن حساب ها

حالا بیایید اکانت را غیرفعال کنیم. بیایید کار را با جک فراست ادامه دهیم. این کد از پارامتر استفاده می کند -چه می شود اگر، که می توانید آن را در comadlet های دیگری بیابید که تغییراتی را برای آزمایش فرمان من بدون اجرای آن ایجاد می کنند.

PS C:\> Disable-ADAccount jfrost -whatif اگر: انجام عملیات "Set" روی هدف "CN=Jack Frost, OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

حالا بیایید آن را به طور واقعی غیرفعال کنیم:

PS C:\> Disable-ADAAccount jfrost

و وقتی زمان فعال سازی اکانت فرا می رسد کدام cmdlet به ما کمک می کند؟

PS C:\> Enable-ADAccount jfrost

این cmdlet ها را می توان در یک عبارت خط لوله استفاده کرد و به شما این امکان را می دهد تا هر تعداد حساب را که دوست دارید فعال یا غیرفعال کنید. به عنوان مثال، این کد تمام حساب های موجود در بخش فروش را غیرفعال می کند

PS C:\> get-aduser -filter "department -eq "sales"" | غیرفعال کردن حساب کاربری

البته یک فیلتر برای Get-ADUserبسیار پیچیده است، اما این جایی است که استفاده از پارامتر -چه می شود اگرهمراه با cmdlet غیرفعال کردن-ADAccountبه کمک می آید

وظیفه 3: قفل حساب کاربری را باز کنید

موقعیتی را در نظر بگیرید که جک هنگام تلاش برای وارد کردن رمز عبور جدید، حساب خود را قفل کرد. به جای تلاش برای یافتن حساب کاربری او از طریق رابط کاربری گرافیکی، روند باز کردن قفل را می توان با استفاده از یک دستور ساده انجام داد.

PS C:\> Unlock-ADAAccount jfrost

cmdlet از پارامترها نیز پشتیبانی می کند -چه می شود اگرو -تایید.

وظیفه 4: حذف حساب

مهم نیست که چند کاربر را حذف کنید - این کار با استفاده از cmdlet آسان است حذف-ADUser. من نمی خواهم جک فراست را حذف کنم، اما اگر بخواهم از کد زیر استفاده می کنم:

PS C:\> Remove-ADUser jfrost -whatif اگر: انجام عملیات "Remove" در هدف "CN=Jack Frost,OU=staff,OU=Testing,DC=GLOBOMANTICS,DC=local".

یا می توانم چندین کاربر را وارد کرده و با یک دستور ساده آنها را حذف کنم:

PS C:\> get-aduser -filter "enabled -eq "false"" -property WhenChanged -SearchBase "OU=Employees, DC=Globomantics,DC=Local" | کجا ($_.WhenChanged -le (Get-Date).AddDays(-180)) | Remove-ADuser -whatif

این دستور هر حساب غیرفعال شده Employees OU را که به مدت 180 روز یا بیشتر تغییر نکرده اند، پیدا و حذف می کند.

وظیفه 5: یافتن گروه های خالی

مدیریت گروه ها یک کار بی پایان و بی قدر است. راه های زیادی برای یافتن گروه های خالی وجود دارد. بسته به سازمان شما، برخی از عبارات ممکن است بهتر از دیگران کار کنند. کد زیر همه گروه‌های موجود در دامنه، از جمله گروه‌های داخلی را پیدا می‌کند.

PS C:\> get-adgroup -filter * | کجا (-نه ($_ | get-adgroupmember)) | نام را انتخاب کنید

اگر گروه هایی با صدها عضو دارید، استفاده از این دستور می تواند زمان زیادی را ببرد. Get-ADGroupMemberهر گروه را بررسی می کند. اگر بتوانید محدود یا سفارشی کنید بهتر است.
در اینجا یک رویکرد دیگر وجود دارد:

PS C:\> get-adgroup -filter " Members -notlike "*" -AND GroupScope -eq "Universal"" -SearchBase "OU=Groups,OU=Employees,DC=Globomantics, DC=local" | انتخاب نام، گروه*

این دستور همه گروه های Universal را که عضویت در OU Groups ندارند را پیدا کرده و برخی از ویژگی ها را نمایش می دهد. نتیجه در شکل 3 نشان داده شده است.


برنج. 3. جستجو و فیلتر کردن گروه های جهانی

وظیفه 6: افزودن کاربران به یک گروه

بیایید جک فراست را به گروه فناوری اطلاعات شیکاگو اضافه کنیم:

PS C:\> add-adgroupmember "chicago IT" -Members jfrost

بله، به همین سادگی است. همچنین می‌توانید به راحتی صدها کاربر را به گروه‌ها اضافه کنید، اگرچه من این را کمی ناخوشایند می‌دانم:

PS C:\> Add-ADGroupMember "Chicago Employees" -member (get-aduser -filter "city -eq "Chicago"")

من از عبارت پرانتزی خط لوله برای یافتن همه کاربرانی که دارایی شهر در شیکاگو هستند استفاده کردم. کد داخل پرانتز اجرا می شود و اشیاء حاصل به پارامتر –Member ارسال می شود. هر شی کاربر به گروه Chicago Employees اضافه می شود. فرقی نمی کند با 5 یا 5000 کاربر سر و کار داشته باشیم، به روز رسانی عضویت های گروه فقط چند ثانیه طول می کشد. این عبارت را می توان با استفاده از آن نیز نوشت ForEach-Objectچه چیزی ممکن است راحت تر باشد:

PS C:\> Get-ADUser -filter "city -eq "Chicago"" | foreach (Add-ADGroupMember "Chicago Employees" -Member $_)

وظیفه 7: اعضای گروه را فهرست کنید

شاید بخواهید بدانید چه کسانی در یک گروه خاص هستند. به عنوان مثال، شما باید به صورت دوره ای دریابید که چه کسی عضو گروه Domain Admins است:

PS C:\> Get-ADGroupMember "Domain Admins"

شکل 4 نتیجه را نشان می دهد.


برنج. 4. اعضای گروه Domain Admins

cmdlet شی AD را برای هر عضو گروه نمایش می دهد. با گروه های تودرتو چه کنیم؟ گروه من شیکاگو همه کاربران مجموعه ای از گروه های تو در تو است. برای دریافت لیستی از تمام حساب ها، فقط باید از پارامتر استفاده کنم - بازگشتی.

PS C:\> Get-ADGroupMember "Chicago All Users" -Recursive | DistinguishedName را انتخاب کنید

اگر می خواهید راه دیگری را انتخاب کنید - پیدا کنید که کاربر در کدام گروه است - از ویژگی user استفاده کنید عضو:

PS C:\> get-aduser jfrost -property Memberof | -ExpandProperty MemberOf CN=NewTest،OU=Groups،OU=Employees، DC=GLOBOMANTICS،DC=local CN=Chicago Test،OU=Groups،OU=کارمندان، DC=GLOBOMANTICS،DC=local CN=Chicago IT،OU= گروه ها، OU=کارمندان، DC=GLOBOMANTICS،DC=محلی CN=کاربران فروش شیکاگو،OU=گروه ها،OU=کارمندان، DC=GLOBOMANTICS،DC=محلی

من از پارامتر استفاده کردم -ExpandPropertyبرای نمایش اسامی عضومانند خطوط

وظیفه 8: حساب های رایانه قدیمی را پیدا کنید

این سوال زیاد از من پرسیده می شود: "چگونه حساب های کامپیوتری قدیمی را پیدا کنم؟" و من همیشه پاسخ می‌دهم: "چه چیزی برای شما منسوخ شده است؟" شرکت ها تعاریف متفاوتی از زمانی دارند که یک حساب رایانه (یا حساب کاربری، مهم نیست) منسوخ شده و دیگر قابل استفاده نیست. برای من به آن دسته از حساب هایی که رمز عبور آنها برای مدت زمان مشخصی تغییر نکرده است توجه می کنم. این مدت برای من 90 روز است - اگر رایانه در این مدت رمز عبور را به همراه دامنه تغییر نداده باشد، به احتمال زیاد آفلاین و قدیمی است. Cmdlet استفاده شده است Get-ADComputer:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| نام، رمز عبور را انتخاب کنید

این فیلتر با مقدار سخت کار می کند، اما این کد برای تمام حساب های رایانه ای که از اول ژانویه 2012 رمز عبور خود را تغییر نداده اند، به روز می شود. نتایج در شکل 5 نشان داده شده است.


برنج. 5. حساب های کامپیوتری قدیمی را پیدا کنید

گزینه دیگر: فرض کنید حداقل در سطح عملکرد دامنه ویندوز 2003 هستید. فیلتر بر اساس ویژگی LastLogontimeStamp. این مقدار تعداد 100 بازه نانوثانیه از 1 ژانویه 1601 است و در GMT ذخیره می شود، بنابراین کار با این مقدار کمی مشکل است:

PS C:\> get-adcomputer -filter "LastlogonTimestamp -gt 0" -properties * | انتخاب نام،lastlogontimestamp، @(Name="LastLogon";Expression=(::FromFileTime ($_.Lastlogontimestamp)))،passwordlastset | LastLogonTimeStamp را مرتب کنید


برنج. 6. مقدار LastLogonTimeStamp را به یک فرمت آشنا تبدیل کنید

برای ایجاد یک فیلتر، باید تاریخ را به عنوان مثال 1 ژانویه 2012 به فرمت صحیح تبدیل کنم. تبدیل در FileTime انجام می شود:

PS C:\> $cutoff=(Get-Date "1/1/2012").ToFileTime() PS C:\> $cutoff 129698676000000000

اکنون می توانم از این متغیر در فیلتر استفاده کنم Get-ADComputer:

PS C:\> Get-ADComputer -Filter "(lastlogontimestamp -lt $cutoff) -or (lastlogontimestamp -notlike "*")" -property * | Name,LastlogonTimestamp,PasswordLastSet را انتخاب کنید

کد بالا همان کامپیوترهایی را که در شکل 5 نشان داده شده است را پیدا می کند.

وظیفه 9: حساب رایانه را غیرفعال کنید

شاید وقتی حساب‌های غیرفعال یا قدیمی پیدا می‌کنید، بخواهید آنها را غیرفعال کنید. انجام این کار بسیار آسان است. ما از همان cmdlet استفاده می کنیم که برای کار با حساب های کاربری استفاده می کردیم. با استفاده می توانید آن را روشن کنید samAccountnameحساب.

PS C:\> Disable-ADAccount -Identity "chi-srv01$" -whatif اگر: انجام عملیات "Set" روی هدف "CN=CHI-SRV01, CN=Computers,DC=GLOBOMANTICS,DC=local".

یا با استفاده از عبارت pipeline:

PS C:\> get-adcomputer "chi-srv01" | غیرفعال کردن-ADAccount

من همچنین می‌توانم از کد خود برای یافتن حساب‌های قدیمی و غیرفعال کردن همه آنها استفاده کنم:

PS C:\> get-adcomputer -filter "Passwordlastset -lt "1/1/2012"" -properties *| غیرفعال کردن-ADAccount

وظیفه 10: کامپیوترها را بر اساس نوع پیدا کنید

همچنین اغلب از من سؤال می شود که چگونه حساب های رایانه را بر اساس نوع پیدا کنم، مانند سرورها یا ایستگاه های کاری. این نیاز به کمی خلاقیت از طرف شما دارد. هیچ چیزی در AD وجود ندارد که سرور را از مشتری متمایز کند، به جز شاید سیستم عامل. اگر رایانه شما از ویندوز سرور 2008 استفاده می کند، باید چند مرحله اضافی را انجام دهید.
ابتدا باید لیستی از سیستم عامل ها را دریافت کنید و سپس حساب ها را بر اساس سیستم عامل های موجود فیلتر می کنیم.

PS C:\> Get-ADComputer -Filter * -Properties OperatingSystem | OperatingSystem -unique | را انتخاب کنید مرتب سازی سیستم عامل

نتایج در شکل 7 نشان داده شده است.


برنج. 7. بازیابی لیست سیستم عامل

من می‌خواهم همه رایانه‌هایی را که دارای سیستم عامل سرور هستند پیدا کنم:

PS C:\> Get-ADComputer -Filter "OperatingSystem -like "*Server*"" -properties OperatingSystem,OperatingSystem ServicePack | نام،Op* | را انتخاب کنید قالب-لیست

نتایج در شکل 8 نشان داده شده است.

مانند سایر cmdlet های AD Get، می توانید پارامترهای جستجو را سفارشی کنید و در صورت لزوم درخواست را به OU های خاص محدود کنید. تمام عباراتی که نشان داده ام را می توان در عبارات بزرگتر PowerShell ادغام کرد. برای مثال، می‌توانید مرتب‌سازی کنید، گروه‌بندی کنید، فیلترها را اعمال کنید، به CSV صادر کنید، یا گزارش‌های HTML ایجاد و ایمیل کنید - همه از PowerShell! در این مورد، شما مجبور نخواهید بود که یک اسکریپت واحد بنویسید.
در اینجا یک امتیاز وجود دارد: گزارش مربوط به سن گذرواژه کاربر، ذخیره شده در یک فایل HTML:

PS C:\> Get-ADUser -Filter "Enabled -eq "True" -AND PasswordNeverExpires -eq "False"" -Properties PasswordLastSet,PasswordNeverExpires,PasswordExpired | DistinguishedName,Name,pass*,@(Name="PasswordAge"; Expression=((Get-Date)-$_.PasswordLastSet)) |مرتب سازی PasswordAge -نزولی | ConvertTo-Html -Title "Password Age Report" | Out-File c:\Work\pwage.htm !}

اگرچه این عبارت ممکن است کمی ترسناک به نظر برسد، اما استفاده از آن با حداقل دانش از PowerShell آسان است. و تنها یک توصیه آخر باقی می ماند: نحوه تعریف یک ویژگی سفارشی به نام PasswordAge. مقدار نشان دهنده شکاف بین امروز و ویژگی PasswordLastSet است. سپس نتایج را برای ملک جدیدم مرتب می کنم. شکل 9 خروجی دامنه آزمایشی کوچک من را نشان می دهد.

به روز رسانی:
پست حاوی ترجمه مقاله در پورتال است

0

من اسکریپت زیر را دارم که بررسی می کند آیا لیست بزرگی از کاربران در یک فایل CSV عضو یک گروه AD هستند یا خیر و نتایج را در results.csv می نویسد.

مطمئن نیستم که چگونه اسکریپت را تبدیل کنم تا بتوانم $group = "InfraLite" را به $group = DC .\List_Of_AD_Groups.CSV تغییر دهم.

بنابراین این اسکریپت فقط منطبقات را برای یک گروه AD برمی‌گرداند، بلکه منطبقات را برای 80 گروه AD موجود در List_of_AD_groups.csv برمی‌گرداند. نوشتن YES/NO برای هر گروه AD در یک ستون CSV جدید (یا اگر این امکان وجود ندارد، ایجاد یک فایل CSV جداگانه برای هر گروه با نتایج، همین کار را انجام می دهد.

من می توانم این کار را به صورت دستی با تغییر مقدار از $group و نام فایل صادراتی و اجرای مجدد اسکریپت 80 بار انجام دهم، اما برای انجام این کار باید با PS سریع عمل کنم.

برای مثال results.csv?:

NAME AD_GROUP1 AD_GROUP2 AD_GROUP80 و غیره user1 بله نه بله user2 نه نه بله user3 نه بله نه اکو "UserName`InfraLite" >> results.csv $users = GC .\user_list.csv $group = "InfraLite" $members = Get-ADGroupMember -Identity $group -Recursive | -ExpandProperty SAMAccountName foreach ($user در $users) (اگر ($members -contains $user) ( echo "$user $group`tYes" >> results.csv ) دیگری ( echo "$user`tNo" >> نتایج csv.))

  • 2 پاسخ
  • مرتب سازی:

    فعالیت

0

یک راه حل بی اهمیت برای مشکل شما این است که کد موجود خود را در حلقه دیگری بپیچید و یک فایل خروجی برای هر گروه ایجاد کنید:

$groups = Get-Content "C:\groups.txt" foreach ($group در $groups) ($members = Get-ADGroupMember ... ...)

یک رویکرد زیباتر ایجاد یک الگوی نقشه‌برداری گروهی، شبیه‌سازی آن برای هر کاربر و پر کردن یک نسخه با عضویت‌های گروهی کاربر است. چیزی شبیه به این باید کار کند:

$template = @() Get-Content "C:\groups.txt" | ForEach-Object ( $template[$_] = $false ) $groups = @() Get-ADGroup -Filter * | ForEach-Object ( $groups[$_.DistinguishedName] = $_.Name ) Get-ADUser -Filter * -Properties MemberOf | ForEach-Object ( $groupmap = $template.Clone() $_.MemberOf | ForEach-Object ( $groups[$_] ) | Where-Object ( $groupmap.ContainsKey($_)) | ForEach-Object ( $groupmap [$_] = $true ) New-Object -Type PSObject -Property $groupmap ) | Export-Csv "C:\user_group_mapping.csv" -NoType

0

من مدتی است که با آن بازی می کنم و فکر می کنم راهی پیدا کردم که دقیقاً همان چیزی را که دنبالش بودید به شما برسانم.

فکر می کنم انسگر در مسیر درستی قرار داشت، اما نتوانستم کاری را که بعد از آن انجام شد انجام دهم. وی اشاره کرد که در زمان نگارش این مقاله به محیط AD دسترسی نداشته است.

این چیزی است که من به آن رسیدم:

$UserArray = Get-Content "C:\Temp\Users.txt" $GroupArray = Get-Content "C:\Temp\Groups.txt" $OutputFile = "C:\Temp\Something.csv" # راه اندازی یک hashtable برای استفاده بعدی $UserHash = New-Object -TypeName System.Collections.Hashtable # حلقه بیرونی برای افزودن کاربران و عضویت به UserHash $UserArray | ForEach-Object( $UserInfo = Get-ADUser $_ -Properties MemberOf # دستور LPAP را فقط به SAMAaccountName گروه $Memberships = $UserInfo.MemberOf | ForEach-Object(($_.Split(")) می کند. .replace("CN=""") ) #افزودن جفت User=Membership به Hash $UserHash.Add($_,$Memberships) ) #حلقه بیرونی برای ایجاد یک شی به ازای هر کاربر $Results = $UserArray | ForEach-Object( # ابتدا یک شی ساده $User = New-Object -TypeName PSCustomObject -Property @( Name = $_ ) # به صورت پویا اعضا را به شیء اضافه کنید، بر اساس $GroupArray $GroupArray | ForEach-Object ( #Checking $UserHash برای دیدن اینکه آیا گروه در لیست عضویت کاربر نشان داده می‌شود. _ -Value $UserIsMember ) #برگرداندن شی به متغیر Return $User ) #اشیاء را به CSV تبدیل کنید، سپس آنها را خروجی کنید $Results | ConvertTo-CSV -NoTypeInformation | Out-File $OutputFile

بیایید امیدوار باشیم که همه چیز منطقی باشد. تا جایی که توانستم نظر دادم. اگر RSAT را روی هر دستگاهی که روی آن اجرا می کنید نصب نکرده باشید، تبدیل به ADSI بسیار آسان خواهد بود. اگر به آن نیاز دارید، به من اطلاع دهید و من تغییراتی سریع ایجاد خواهم کرد.

عصر بخیر، خوانندگان و مشترکین عزیز، همچنان به بررسی قابلیت های پاورشل و اکتیو دایرکتوری می پردازیم. همانطور که به یاد دارید، تمام حساب های کاربری و کامپیوتر او در پایگاه داده NTDS.dit قرار دارند، همه چیز عالی و متمرکز است. هنگامی که یک شرکت بیش از یک مدیر سیستم دارد، ممکن است شرایطی پیش بیاید که زباله ها و اعتبارنامه های غیر ضروری جمع شوند. همه ما انسان هستیم و می‌توانیم برخی چیزها را فراموش کنیم و در برخی لحظات حواسمان پرت شود که این امر منجر به فراموشی اطلاعات مهم نیز می‌شود. و به این نتیجه می رسیم که کاربران غیرفعال (اخراج شده یا فراموش شده) در Actvie Directory جمع می شوند؛ در هر صورت یک مدیر سیستم خوب باید آنها را شناسایی کند، غیرفعال کند و در صورت تمایل آنها را حذف کند، کاری که ما انجام خواهیم داد.

از طریق Snap-in ADUC

آخرین بار من قبلاً مثالی از استفاده از Active Directory Users and Computers برای شما آوردم که از طریق آن رایانه‌های گمشده را در شبکه محلی که یک ماه ظاهر نشده بودند جستجو کردیم. اکنون ما همین کار را با حساب های کاربری انجام خواهیم داد. من روی ویندوز سرور 2012 R2 AD دارم، ADUC را باز کنید، برای انجام این کار WIN+R را فشار دهید و dsa.msc را وارد کنید.

در فرم درخواستی که باز می شود، وارد کنید:

  • درخواست نام > برای من این کاربران گمشده هستند
  • توضیحات در صورت لزوم
  • Request root > در اینجا می توانید کل دامنه را ترک کنید یا آن را در OU مورد نظر مشخص کنید

سپس روی دکمه درخواست کلیک کنید.

در برگه کاربران، آیتم «تعداد روزهای پس از آخرین ورود» را می بینیم؛ به عنوان مثال، من آن را روی 60 روز تنظیم کردم.

در نتیجه، لیستی را که از حساب های غیرفعال کارمند نیاز دارید دریافت خواهید کرد.

از طریق پاورشل snap-in

همین کار را می توان از طریق Powershell انجام داد. من فوراً کدی را به شما می‌دهم که وظیفه آن جستجوی کاربران غیرفعال است؛ برای این کار یک دوره 45 روزه را انتخاب کردم، داده‌های کاربر را غیرفعال کردم و به یک OU مشخص شده منتقل شدم.

$date_with_offset= (Get-Date).AddDays(-45)
$users = Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | مرتب سازی LastLogonDate
foreach ($user در $users) (set-aduser $user -enabled $false; move-adobject -identity $user -targetpath "ou=Fired,ou=Moscow L. users,ou=Location,dc=msk,dc= contoso,dc=com")
Get-ADUser -Properties LastLogonDate -Filter (LastLogonDate -lt $date_with_offset ) | مرتب سازی LastLogonDate | نام FT، LastLogonDate -AutoSize | خارج از فایل c:\Script\users.txt

  • در خط اول متغیری را اعلام می کنید که عبارت جستجو را در آن تنظیم می کنید
  • یک متغیر ایجاد کنید و بر اساس آخرین زمان ورود به سیستم انتخاب کنید
  • جابجایی کاربران

  • تهیه گزارش به یک فایل

چیزهای مفیدتر در مورد کار با کاربر. قبل از استفاده از دستورات زیر، باید ماژول Active Directory را از طریق دستور بارگذاری کنید

Get-Help Get-ADUser

در این مقاله به توانایی PowerShell برای مدیریت گروه های دامنه Active Directory می پردازیم. ما به نحوه ایجاد یک گروه جدید در AD، افزودن کاربران به آن (یا حذف آن)، فهرست کردن کاربران گروه و چندین اقدام مفید دیگر با گروه های دامنه که در مدیریت روزمره بسیار مفید هستند، خواهیم پرداخت. برای مدیریت گروه های AD، ماژول Active Directory PowerShell cmdlet های اساسی زیر را ارائه می دهد:

برای استفاده از این cmdlet ها در جلسه PowerShell خود، یک ماژول تعامل ویژه AD باید بارگذاری شود - ماژول Active Directory برای Windows PowerShell. این ماژول اولین بار در ویندوز سرور 208 R2 معرفی شد. در ویندوز سرور 2012 و بالاتر، این ماژول به طور پیش فرض فعال است. در رایانه های مشتری، می توان آن را به عنوان یکی از اجزای RSAT نصب و فعال کرد. می توانید بررسی کنید که آیا ماژول به صورت زیر بارگذاری شده است:

Get-Module -Listavailable

همانطور که می بینید، ماژول ActiveDirectory بارگذاری شده است. اگر نه، آن را با دستور وارد کنید:

دایرکتوری فعال Import-Module

لیست کامل دستورات ماژول را می توان به صورت زیر بدست آورد:

Get-Command -Module ActiveDirectory

در مجموع 147 cmdlet در ماژول موجود است که 11 عدد از آنها می توانند با گروه ها کار کنند.

Get-Command -Module ActiveDirectory -Name "*Group*"

در اینجا لیست آنها است:

  • Add-ADPrincipalGroupMembership
  • Get-ADAccountAuthorizationGroup
  • Get-ADGroup
  • Get-ADGroupMember
  • Get-ADPrincipalGroupMembership
  • New-ADGroup
  • Remove-ADGroup
  • Remove-ADPrincipalGroupMembership
  • Set-ADGroup

بیایید با استفاده از دستور یک گروه جدید در کانتینر اکتیو دایرکتوری مشخص شده (OU) ایجاد کنیم New-ADGroup:

New-ADGroup "TestADGroup" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupScope Global -PassThru –Verbose

با استفاده از ویژگی شرحمی توانید شرحی از گروه را مشخص کنید و از آن استفاده کنید DisplayNameتغییر نام نمایشی

پارامتر GroupScopeمی توانید یکی از انواع گروه زیر را مشخص کنید:

  • 0 = DomainLocal
  • 1 = جهانی
  • 2 = جهانی

شما می توانید یک گروه توزیع مانند زیر ایجاد کنید:

New-ADGroup "TestADGroup-Distr" -path "OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru" -GroupCategory Distribution -GroupScope Global -PassThru –Verbose

Add-AdGroupMember - کاربران را به یک گروه AD اضافه کنید

با استفاده از Add- می توانید کاربران را به گروه Active Directory اضافه کنید. AdGroupMember. بیایید دو کاربر را به گروه جدید اضافه کنیم:

Add-AdGroupMember -Identity TestADGroup -Members user1, user2

اگر لیست کاربرانی که باید به یک گروه اضافه شوند بسیار زیاد است، می‌توانید فهرست حساب‌ها را در یک فایل CSV ذخیره کنید، سپس فایل را وارد کرده و هر کاربر را به گروه اضافه کنید.

فرمت فایل CSV به شرح زیر است (لیست کاربران در هر خط، نام ستون - کاربران)

Import-CSV .\users.csv -Header users | ForEach-Object (Add-AdGroupMember -Identity ‘TestADGroup’ -members $_.users)

برای دریافت تمام اعضای یک گروه (groupA) و اضافه کردن آنها به گروه دیگر (groupB)، از این دستور استفاده کنید:

Get-ADGroupMember "GroupA" | Get-ADUser | ForEach-Object(Add-ADGroupMember -Identity "Group-B" -Members$_)

اگر می خواهید اعضای همه گروه های تو در تو را در یک گروه جدید (به صورت بازگشتی) کپی کنید، باید از دستور زیر استفاده کنید:

Get-ADGroupMember -Identity "GroupA" -Recursive | Get-ADUser | ForEach-Object(Add-ADGroupMember -Identity "GroupB" -Members$_)

Remove-ADGroupMember – حذف کاربران از یک گروه

برای حذف کاربران از یک گروه AD، باید از دستور Remove-ADGroupMember استفاده کنید. بیایید دو کاربر را از گروه حذف کنیم:

Remove-ADGroupMember -Identity TestADGroup -Members user1, user2

حذف کاربران از گروه را تأیید کنید:

اگر می خواهید کاربران را از یک گروه بر اساس لیستی از یک فایل CSV حذف کنید، از این دستور استفاده کنید:

Import-CSV .\users.csv -Header users | ForEach-Object (Remove-ADGroupMember -Identity ‘TestADGroup’ -members $_.users)

Get-ADGroup - اطلاعاتی در مورد یک گروه AD بدست آورید

cmdlet به شما کمک می کند اطلاعاتی در مورد گروه بدست آورید Get-ADGroup:

Get-ADGroup "TestADGroup"

این دستور اطلاعات مربوط به ویژگی های اصلی گروه (DN، نوع گروه، نام، SID) را نمایش می دهد. برای نمایش مقدار تمام صفات گروه دامنه AD، دستور زیر را اجرا کنید:

Get-ADGroup "TestADGroup" -properties *

همانطور که مشاهده می کنید اکنون ویژگی هایی مانند زمان ایجاد و اصلاح گروه، توضیحات و ... نمایش داده می شوند.

با استفاده از cmdlet Get-ADGroup، می توانید با استفاده از یک الگوی خاص، تمام گروه هایی را که به آنها علاقه دارید پیدا کنید. به عنوان مثال، شما باید تمام گروه های AD را که نام آنها حاوی عبارت است را پیدا کنید مدیران :

Get-ADGroup -LDAPFilter "(name=*admins*)" | قالب-جدول

Get-ADGroupMember - نمایش لیستی از کاربران گروه AD

نمایش لیستی از کاربران گروه:

Get-ADGroupMember "TestADGroup"

برای اینکه فقط نام کاربری در نتایج باقی بماند، اجرا کنید:

Get-ADGroupMember "TestADGroup"| نام فوت

اگر این گروه شامل سایر گروه‌های دامنه است، برای نمایش فهرست کامل اعضا، از جمله همه گروه‌های تودرتو، از بازگشتی.

Get-ADGroupMember 'server-admins' -recursive| نام ft

برای صادر کردن لیستی از حساب های متعلق به یک گروه خاص به یک فایل CSV (برای استفاده بعدی در اکسل)، دستور زیر را اجرا کنید:

Get-ADGroupMember "server-admins" -recursive| ft samaccountname| Out-File c:\ps\admins.csv

برای افزودن اطلاعات حساب کاربری در AD به یک فایل متنی، از cmdlet استفاده می کنیم. به عنوان مثال، علاوه بر حساب، باید موقعیت و شماره تلفن کاربر گروه را نیز نمایش دهید:

Get-ADGroupMember -Identity 'server-admins' -recursive| foreach ( Get-ADUser $_ -properties title، OfficePhone|Select-Object عنوان، OfficePhone)

(Get-ADGroupMember -Identity "Domain Admins"). تعداد

معلوم شد که در گروه "مدیران دامنه" 7 حساب سرپرست داریم.

برای یافتن لیستی از گروه های خالی در یک OU خاص، از این دستور استفاده کنید:

Get-ADGroup -Filter * -Properties Members -Searchbase "OU=Moscow,DC=corp,dc=winitpro,DC=ru” | کجا (-نه $_.members) | نام را انتخاب کنید

بهترین مقالات در این زمینه