• اسکریپت هایی برای تخلیه همه کاربران از MS Active Directory (ITGC). یافتن کاربران غیرفعال در اکتیو دایرکتوری

    امروز سعی خواهیم کرد لیستی از تمام کاربران را آپلود کنیم فایل جداگانهاز جانب اکتیو دایرکتوری. PowerShell دستیار اصلی ما در این زمینه خواهد بود. موضوع این است که مایکروسافت در ابتدا برنامه ریزی کرده بود کنسول فرمان PowerShell به عنوان ابزار اصلی برای مدیریت اجزای سرور ویندوز. و امروز که نسخه 2.0 را داریم، به طور کلی، این درست است.

    حتی در گذشته نه چندان دور، برای اینکه به نحوی با AD تعامل داشته باشند، مدیران باید یا ابزار dsquery یا اسکریپت ها یا ابزارهای مختلف را در اختیار داشته باشند. امروز، با شروع ویندوز سرور 2008 R2، می توانیم با AD از طریق PowerShell کار کنیم. با ظهور PowerShell 2.0، یک ماژول ویژه برای تعامل با Active Directory استفاده می شود ماژول اکتیو دایرکتوری برای Windows PowerShell ، که شامل لیست مورد نیاز cmdlet ها می باشد. برای وظایف خود از دستور استفاده خواهیم کرد Get-ADUser.

    بنابراین، بسته به اینکه کنسول PowerShell را روی کدام سیستم عامل اجرا کنیم، باید "مراحل آماده سازی" را انجام دهیم.

    1) اگر از زیر ویندوز سرور کار می کنیم تا نسخه 2012، سپس باید دستور را اجرا کنیم:

    • دایرکتوری فعال Import-Module – دستور وارد کردن ماژول به AD

    برای نسخه های سیستم عامل از 2012 و بالاتر، این ماژول قبلاً به طور پیش فرض فعال است.

    2) اگر از زیر هر ویندوز کلاینت کار می کنیم، باید بسته روی آن نصب شود مدیریت از راه دور RSAT با ماژول Active Directory نصب شده است برای ویندوزپاورشل.

    شایان ذکر است که cmdlet Get-ADUser توصیه می شود زمانی اجرا شود که میزان داده های آپلود شده تا 1000 کاربر باشد.

    صادر کردن کاربران AD با استفاده از PowerShell به یک فایل جداگانه

    ابتدا، اجازه دهید راهنمای دستور Get-ADUser را فراخوانی کنیم. در نتیجه، تمام دستورات لازم برای مدیریت بیشتر را دریافت خواهید کرد.

    • به Get-ADUser کمک کنید - فرمان برای فراخوانی کمک

    برای به دست آوردن لیستی از همه کاربران با تمام خصوصیات در یک پنجره PowerShell، باید دستور زیر را اجرا کنید:

    • Get-ADUser -filter * - لیست صادرات کاربران AD

    این تخلیه کاملاً آموزنده نیست و در همه پنجره ها جای نمی گیرد اطلاعات لازم. بنابراین، بیایید سعی کنیم جستجو را محدود کنیم و ویژگی های یک کاربر خاص به نام user1 را نمایش دهیم:

    • Get-ADUser -identity user1 -properties * - صادرات خواص یک کاربر خاص

    و اکنون بیایید سعی کنیم لیستی از همه کاربران را با ویژگی های آنها به یک خارجی صادر کنیم txt یا csvفایل:

    • Get-ADUser -filter * -properties * | Export-csv -path c:\users.csv -encoding Unicode - صادرات کاربران به یک فایل جداگانه

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

    هنگام مشاهده یک فایل، داده ها به یک خط صادر می شوند و بنابراین قابل خواندن نیستند. برای تغییر این مورد باید موارد زیر را انجام دهیم:

    در نظرات مقاله قبلی، آنها به جای 1C حسابداری در اکسل را به یاد آوردند. خوب، بیایید بررسی کنیم که چقدر اکسل را می شناسید. امروز به شما نشان خواهم داد که چگونه می توانید داده ها را از اکتیو دایرکتوری دریافت کنید و بدون ماکرو و PowerShell با آن کار کنید - فقط با مکانیزم های معمولی Office. به عنوان مثال، اگر قبلاً چیزی مانند Microsoft SCOM ندارید، به راحتی می توانید تجزیه و تحلیل استفاده از سیستم عامل ها را در سازمان خود دریافت کنید. خوب، یا فقط خود را گرم کنید و از فیلمنامه ها منحرف شوید.


    البته می توانید داده ها را مانند مثال های زیر تنها با یک خط در PowerShell دریافت کنید. اما، اولا، PowerShell بسیار خسته کننده است، و ثانیا، اکسل می تواند به صورت پویا داده ها را به روز کند - اسناد حاصل را می توان در وب منتشر کرد و به روز رسانی آنها را فراموش کرد.

    برای کار با داده ها از موتور Power Query استفاده می کنم. برای آفیس 2010 و 2013 باید یک افزونه را نصب کنید مایکروسافت آفیس 2016 این ماژول قبلاً ساخته شده است. متأسفانه نسخه استاندارد برای ما کافی نیست، ما به Professional نیاز داریم.


    خود مکانیزم برای دریافت و پردازش داده ها از منابع مختلف - از ODBC قدیمی و فایل های متنی، به Exchange، Oracle و Facebook. اطلاعات بیشتر در مورد مکانیسم و ​​داخلی زبان برنامه نویسی"M" قبلاً در Habré نوشته شده است، اما من چند نمونه از استفاده از Power Query را برای دریافت داده از اکتیو دایرکتوری تجزیه و تحلیل خواهم کرد.

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

    پرس و جو به پایگاه داده دامنه خود در برگه "داده ها - درخواست جدید - از منابع دیگر - از اکتیو دایرکتوری" ایجاد می شود.



    منبع داده را مشخص کنید.


    شما باید یک نام دامنه را انتخاب کنید، داده های لازم برای اتصال را مشخص کنید. بعد، نوع اشیاء را انتخاب می کنیم، در این مثال - کاربر. در سمت راست پنجره پیش نمایش، پرس و جو در حال اجرا است و پیش نمایش داده ها را نشان می دهد.



    ما درخواست را آماده می کنیم، پیش نمایش را تحسین می کنیم.


    شما باید با کلیک بر روی دکمه "ویرایش" و انتخاب ستون های مورد نظر، درخواست را از قبل آماده کنید. در واقع این ستون ها کلاس هایی هستند که هر کدام شامل مجموعه ای از ویژگی های خاص یک شی اکتیو دایرکتوری به جز ستون اصلی هستند. نمایش نام، که خود یک صفت است. من به کلاس ها می مانم کاربر, شخص, بالاو امنیت اصلی. اکنون باید ویژگی های لازم را از هر کلاس با استفاده از "پسوند" انتخاب کنید - یک نماد با دو فلش در سر ستون:

    • کلاس کاربربا انتخاب گسترش دهید lastLogonTimestampو کنترل حساب کاربری;
    • V شخصانتخاب کنید شماره تلفن;
    • V بالاwhenCreated;
    • و در امنیت اصلیSamAccountName.


    گسترش پرس و جو


    حالا بیایید یک فیلتر راه‌اندازی کنیم: به‌ویژه، برای اینکه حساب‌های مسدود نشوند، باید ویژگی userAccountControl دارای مقدار 512 یا 66048 باشد. ممکن است فیلتر در محیط شما متفاوت باشد. می توانید اطلاعات بیشتری در مورد این ویژگی در مستندات مایکروسافت بخوانید.



    اعمال فیلتر.


    گاهی اوقات اکسل فرمت داده ها، به خصوص مقادیر ویژگی lastLogonTimestamp را به اشتباه تعیین می کند. اگر ناگهان چنین بدبختی رخ داد، در تب "تبدیل" می توانید قالب صحیح را تنظیم کنید.

    اکنون ستون userAccountControl باید حذف شود - اصلاً در صفحه نمایش مورد نیاز نیست. و روی "دانلود و بستن" کلیک کنید.


    نتیجه یک بشقاب بود که باید به ذهن بسپارید. به عنوان مثال، نام ستون ها را به چیزی قابل خواندن تغییر دهید. و به روز رسانی خودکار داده ها را تنظیم کنید.


    به‌روزرسانی خودکار هنگام باز کردن جدول یا با وقفه زمانی در برگه «داده‌ها» در «خواص» پیکربندی می‌شود.



    تنظیمات به روز رسانی داده ها


    پس از تکمیل تنظیمات به‌روزرسانی، می‌توانید با خیال راحت جدول را به کارکنان بخش پرسنل یا سرویس امنیتی بدهید - به آنها اطلاع دهید که چه کسی و چه زمانی وارد سیستم شده است.


    درخواست کد به زبان "M" در زیر اسپویلر.

    اجازه دهید Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], user1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(user1,( "organizationalPerson"، "shadowAccount"، "posixAccount"، "msExchOmaUser"، "msExchBaseClass"، "msExchIMRecipient"، "msExchCertificateInformation"، "msExchMultiMediaUser"، "msExchMailStorage"، "msExchMailStorage"، "msExchCustomRes"،") #"Expanded SecurityPrincipal" = Table.ExpandRecordColumn(#"ستونهای راه دور"، "securityPrincipal"، ("sAMAccountName")، ("sAMAccountName")، #"Expanded top" = Table.ExpandRecordColumn(#"ExpandRecordColumn(#"ExpandRecord"Expanald "، ("whenCreated")، ("whenCreated"))، #"Expanded person" = Table.ExpandRecordColumn(#"Expanded top", "person", ("telephoneNumber"), ("telephoneNumber"))، #" Expanded user" = Table.ExpandRecordColumn(#"Expanded person", "user", ("lastLogonTimestamp"، "userAccountControl")، ("lastLogonTimestamp"، "userAccountControl"))، #"رشته های با فیلتر اعمال شده" = Table.SelectRows (#"کاربر عنصر گسترش یافته"، هر کدام (= 512 یا = 66048))، #"نوع تغییر یافته" = Table.TransformColumnTypes(#"ردیف هایی با فیلتر اعمال شده،(("lastLogonTimestamp"، نوع datetime)))، #" Removed columns1" = Table.RemoveColumns(#"Changed type",("userAccountControl")) in #"Removed columns1"

    ما یک دفترچه آدرس ایجاد می کنیم، یا وقتی پورتال شرکتی با AD دوست نیست چه کاری انجام دهیم

    یک نوع دیگر با استفاده از اکسلدر ارتباط با Active Directory، این تشکیل یک کتاب آدرس بر اساس داده های AD است. واضح است که دفترچه آدرسفقط در صورتی مرتبط خواهد بود که دامنه مرتب باشد.


    یک درخواست برای یک شی ایجاد کنید کاربر، کلاس را گسترش دهید کاربر V پست الکترونیکی، و کلاس شخص V شماره تلفن. تمام ستون ها را حذف کنید به جز نام متمایز- ساختار دامنه ساختار شرکت را تکرار می کند؛ بنابراین، نام ها واحدهای سازمانینام بخش ها را مطابقت دهید به طور مشابه، گروه های امنیتی را می توان به عنوان مبنایی برای نام های OU استفاده کرد.


    حالا از خط CN=نام کاربری، OU=بخش حسابداری، OU=بخش، DC=دامنه، DC=ruشما باید مستقیماً نام بخش را استخراج کنید. ساده ترین راه برای انجام این کار استفاده از جداکننده ها در تب Transform است.



    متن را استخراج می کنیم.


    من به عنوان جداکننده استفاده می کنم OU=و ,OU=. در اصل کاما کافیه ولی من با خیال راحت بازی میکنم.



    جداکننده ها را وارد کنید.


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



    نمای جدول نهایی

    گزارش سریع از ترکیب ایستگاه های کاری، بدون معرفی عوامل و سایر آماده سازی ها

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



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


    کلاس های ستون را ترک کنید کامپیوترو بالاو آنها را گسترش دهید:

    • کلاس کامپیوتربا انتخاب گسترش دهید cn, سیستم عامل, OperatingSystemServicePackو نسخه سیستم عامل;
    • در کلاس بالاانتخاب کنید whenCreated.


    درخواست تمدید شده


    در صورت تمایل می توانید فقط در سیستم عامل های سرور گزارش تهیه کنید. به عنوان مثال، یک فیلتر روی ویژگی OperatingSystem یا OperatingSystemVersion اعمال کنید. من این کار را انجام نمی دهم، اما نمایش زمان ایجاد را اصلاح می کنم - من فقط به سال علاقه دارم. برای انجام این کار، در تب "تبدیل"، ستون مورد نیاز خود را انتخاب کرده و در منوی "تاریخ" "سال" را انتخاب کنید.



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


    اکنون باقی مانده است که ستون نمایش نام را به عنوان غیر ضروری حذف کنید و نتیجه را بارگیری کنید. داده ها آماده است. اکنون می توانید مانند یک میز معمولی با آنها کار کنید. برای شروع، یک جدول محوری در تب "Insert" - "Pivot Table" ایجاد می کنیم. ما با انتخاب منبع داده موافقیم و فیلدهای آن را تنظیم می کنیم.



    تنظیمات فیلد جدول محوری.


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



    جدول محوری برای رایانه ها در AD.


    به صورت اختیاری، می‌توانید یک نمودار خلاصه را نیز در برگه «درج» اضافه کنید. در «دسته‌ها» (یا در «ردیف‌ها» به سلیقه) اضافه کنید سیستم عامل، به داده ها cn. در تب "طراح" می توانید نوع نموداری را که دوست دارید انتخاب کنید، من نمودار دایره ای را ترجیح دادم.



    نمودار دایره ای.


    اکنون به وضوح می توانید ببینید که با وجود به روز رسانی در حال انجام، تعداد کل ایستگاه های کاری با ویندوز XP و سرورهای با ویندوز 2003 بسیار زیاد است. و چیزی برای تلاش وجود دارد.


    درخواست کد زیر اسپویلر.

    اجازه دهید Source = ActiveDirectory.Domains("domain.ru"), domain.ru = Source()[#"Object Categories"], computer1 = domain.ru(), #"Remote Columns" = Table.RemoveColumns(computer1,( "user"، "organizationalPerson"، "person"))، #"سایر ستون های راه دور" = Table.SelectColumns(#"Remote columns"("displayName"، "computer"، "بالا"))، #"Element Expanded computer" = Table.ExpandRecordColumn(#"سایر ستون های راه دور"، "کامپیوتر"، ("cn"، "operatingSystem"، "operatingSystemServicePack"، "operatingSystemVersion")، ("cn"، "operatingSystem"، "operatingSystemServicePack"، " OperatingSystemVersion")، #"Expanded top" = Table.ExpandRecordColumn(#"ExpandedColumn"، "top"، ("whenCreated")، ("whenCreated"))، #"Extracted Year" = Table.TransformColumns( #"Expanded top",(("whenCreated", Date.Year))), #"Removed columns1" = Table.RemoveColumns(#"Extracted year",("displayName")) in #"Removed columns1"

    افزودن برچسب

    اختصاص داده شده به استفاده از 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) با پنجره ها 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 وجود دارد: -passthru, -چه می شود اگر، و -تاییدکار نمی کند. اگر میانبر را ترجیح می دهید، موارد زیر را امتحان کنید:

    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

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

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

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

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

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

    PS C:\> Disable-ADAccount jfrost

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

    PS C:\> Enable-ADAccount jfrost

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

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

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

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

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

    PS C:\> Unlock-ADAccount 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" | انتخاب نام، گروه*

    این دستور همه چیز را پیدا می کند گروه های جهانی(گروه های جهانی) که در 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 برای هر عضو گروه خروجی می دهد. در مورد گروه های تو در تو چطور؟ گروه My Chicago All Users مجموعه ای از گروه های تودرتو است. برای دریافت لیستی از تمام حساب ها، فقط باید از پارامتر استفاده کنم - بازگشتی.

    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 | SortLastLogonTimeStamp


    برنج. 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 خروجی دامنه آزمایشی کوچک من را نشان می دهد.

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

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

    از طریق ADUC Snap

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

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

    • Query name > mye is lost users
    • توضیحات در صورت نیاز
    • Request root > در اینجا می توانید کل دامنه را ترک کنید یا روی OU مورد نظر مشخص کنید

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

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

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

    از طریق پاورشل اسنپ

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

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

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

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

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

    Get-Help Get-ADUser

    اسکریپت برای تخلیه همه کاربران از MS Active Directory (ITGC)

    ایوان پیسکونوف

    یکی از روشهای استاندارد حسابرسی ITGC برای کاتالوگ اکتیو دایرکتوری دریافت دانلود از همه کاربران دامنه است. بر اساس داده های به دست آمده، روش های آزمایش بیشتر شکل می گیرد، به عنوان مثال، مطالعه لیست مدیران یا شناسایی کاربران با رمز عبور منقضی شده. موثرترین راه برای تشکیل چنین تخلیه ای استفاده از آن خواهد بود رابط استاندارد پاورشل ، نمونه هایی از آن را در این مقاله بررسی خواهیم کرد.

    1. آپلود سریع توسط اسکریپت PowerShell

    در زیر یک اسکریپت PowerShell به عنوان یکی از ساده ترین و ساده ترین اسکریپت ها آورده شده است راه های سریعلیستی از تمام کاربران دامنه AD با فرمت CSV دریافت کنید که بدون مشکل توسط همان اکسل باز می شود.

    $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = "LDAP://ou=Users,ou=Departmets,dc=test,dc=en" $objSearcher.Filter = "(&(objectCategory=per) (!userAccountControl:1.2.840.113556.1.4.803:=2))" $users = $objSearcher.FindAll() # تعداد حساب ها $users.Count $users | ForEach-Object ( $user = $_.Properties New-Object PsObject -Property @( عنوان = $user.description بخش = $user.department ورود = $user.userprincipalname تلفن = $user.telephonenumber اتاق = $user.physicaldeliveryofficenamename = $user.cn ) ) | Export-Csv -NoClobber -Encoding utf8 -Path C: list_domain_users.csv

    برای اینکه اسکریپت روی سیستم شما کار کند، باید کمی آن را اصلاح کنید، یعنی پارامترهای لازم را وارد کنید، یعنی. همانطور که در این مثال این پارامترها هستند کاربران در واحد بخش ها در دامنه Test.ru. و همچنین مسیر محل ذخیره فایل را مشخص کنید. list_domain_users.csv

    پس از تخلیه، اگر بلافاصله باز شود list_domain_users.csv ، به شکلی غیرقابل خواندن به نظر می رسد، اما با استفاده از ابزارهای استاندارد، می توانیم به راحتی آن را به قالب مورد نیاز خود بیاوریم. باز شدن در اکسل list_domain_users.csv ، ستون اول را انتخاب کنید، سپس به تب "داده" بروید و روی "متن بر ستون" کلیک کنید. Delimited را انتخاب کرده و Next را بزنید. آماده!

    !توجه داشته باشیدکه این اسکریپت بیش از 1000 کاربر را نمایش نخواهد داد. این برای یک شرکت کوچک کاملاً مناسب است، اما کسانی که تعداد زیادی کاربر در دامنه دارند باید به روش های توضیح داده شده در زیر متوسل شوند.

    2. PowerShell Cmdlet پیشرفته برای دریافت دانلودهای کاربر Active Directory

    ابزار Active Directory Module for Windows PowerShell (معرفی شده در Windows Server 2008 R2 و بالاتر) به شما امکان می دهد cmdlet هایی ایجاد کنید که دستکاری های مختلفی را با اشیاء دایرکتوری AD انجام می دهند. برای دریافت اطلاعات در مورد کاربران و ویژگی های آنها، از cmdlet استفاده کنید Get-ADUser.

    برای شروع یک پنجره Powershell راه اندازی کنید با حقوق مدیر و وارد کردن ماژول Active Directory برای اقدامات بیشتر:
    دایرکتوری فعال Import-Module

    به لیست تمام حساب های دامنه و دستور را اجرا کنید:

    Get-ADUser -filter *

    به کنار کشیدن اطلاعات کاملدر مورد تمام ویژگی های موجود user tuser، دستور را اجرا کنید

    Get-ADUser -idity tuser -properties *


    به عنوان مثال، ما علاقه مند به اطلاعات در مورد تاریخ و زمان تغییر رمز عبور پس از انقضا . نتیجه اجرای دستور را می توان به یک فایل متنی صادر کرد:

    Get-ADUser -filter * -properties PasswordExpired، PasswordLastSet، PasswordNeverExpires | ft Name، PasswordExpired، PasswordLastSet، PasswordNeverExpires > C:tempusers.txt

    یا بلافاصله در CSV آپلود کنید ، که بعداً به راحتی به اکسل صادر می شود (علاوه بر این، با استفاده از sort-object، جدول را بر اساس ستون PasswordLastSet مرتب می کنیم، و همچنین یک شرط Where اضافه می کنیم - نام کاربری باید شامل رشته "Dmitry" باشد)

    Get-ADUser -filter * -properties PasswordExpired، PasswordLastSet، PasswordNeverExpires | کجا ($_.name –مانند "*Dmitry*") | مرتب سازی شی PasswordLastSet | select-object Name, PasswordExpired, PasswordLastSet, PasswordNeverExpires | Export-csv -path c:tempuser-password-expires-2015.csv