مدیریت با Powershell – قسمت اول

شروع در Powershell

Powershell یک رابط متنی بر اساس دستور مبتنی بر وظیفه است که از زبان های اسکریپی پشتیبانی به عمل می آورد. به جهت سهولت این ابزار جهت مدیریت روی Windows Server توصیه می شود.دستورات Powershell را cmdlets می گوییم و با استفاده از این ابزار قصد داریم عملیات پیچیده ای را با ساده ترین شکل ممکن روی Active Directory Domain Services انجام دهیم. در اینجا هدف ساخت اسکریپت نمی باشد و فقط از cmdlets ها استفاده می کنیم. اگر می خواهید در خصوص Powershell اطلاعات با عمق بیشتری به دست آورید، کتاب Windows PowerShell 2.0 Administrator’s Pocket Consultant نوشته ی William R. Stanek از انتشارات مایکروسافت می تواند به شما کمک کند. اطلاعاتی که در این سری مطالب ارائه می گردند، برای اکثر مدیریت ها روی Active Directory کفایت می کنند.

Powershell به صورت پیش فرض در Windows Server 2008/2012 نصب شده است و برای دسترسی به آن کافی است آیکون آن را از روی Task Bar باز کنید و یا در run وارد کنید:  Powershell.exe

ماژول ها

Powershell به صورت خودکار از صد ها cmdlets پشتیبانی می کند و برای افزودن کارایی آن می توان از snap-inها یا Module (ماژول ها) استفاده کرد. یک ماژول عبارت است از پکیجی از cmdlets ها که لیست cmdlet های Powershell اضافه می گردد و قابلیت های جدیدی را در اختیار قرار می دهد. به صورت پیش فرض در زمان نصب سرویس، Active Directory Module در powershell اضافه شده است. علاوه بر cmdlets ها می توان از همان دستورات پیشین cmd نیز در powershell با همان syntax (نحو) استفاده کرد. cmdlet ها حساس به حروف بزرگ و کوچک نیستند.

برای نصب Active Directory Module ابتدا لازم است  Remote Ser ver Administration Tools یا به اختصار RSAT را نصب کنید و سپس در Turn Windows Features On Or Off گزینه  Active Directory Module For Windows PowerShell که تحت گزینه Remote Server Administration Tools در قسمت AD DS است را انتخاب کنید.

این Module در سمت کلاینت نصب می گردد و لازم است Active Directory Web Services روی حداقل یکی از دامین کنترلرها (DC) در دامین مورد نظر نصب شده باشد. ADWS در Windows Server 2008 R2/2012 به صورت خودکار در زمان Promote کردن DC نصب می گردد. اگر قصد دارید از نسخ پیشین استفاده کنید لازم است Active Directory Management Gateway Service را دانلود و نصب کنید.

جهت دسترسی به ابزار مجهز شده به Module می توانید Active Directory Module For Windows PowerShell موجود در Administrative Tools را باز کنید و یا در powershell وارد کنید:

Import-Module ActiveDirectory

ps1

ماژول اکتیو دایرکتوری دارای بیش از ۷۶ cmdlets است که به خاطر سپردن آن ها امری دشوار خواهد بود. از این رو لازم است روش آنکه چگونه بتوان به cmdlet مورد نظر دسترسی پیدا کرد و از آن استفاده کرد بسیار حیاتی خواهد بود. با استفاده از دستور زیر می توانید لیست cmdlet ها را دریافت کنید.

Get-Command

cmdlet ها همیشه یه فرمت فعل-مفعول دارند. به عنوان مثال برای دریافت لیست پروسه های در حال اجرا کافی است دستور زیر را وارد کنید:

Get-Service

با استفاده از دستور زیر می توانید لیست تمام افعال به کار گرفته شده را ببینید. مفعول ها از یک استاندارد که توسط مایکروسافت معین شده اند استفاده می کنند به عنوان مثال تمام اسامی مربوط به Active Directory با AD آغاز می گردد.

Get-Verb

دستور زیر، لیستی از cmdlet های مربوط AD را فراهم می آورد:

Get-Command -Noun AD* | More

ps2

همانند cmd استفاده از more| سبب می شود نتایج به صورت صفحه بندی شده نمایش داده شود. روش بهتر برای نمایش cmdlet های یک ماژول استفاده از دستور زیر است:

Get-Command -Module ActiveDirectory

پارامتر ها

اکثر cmdlet ها دارای ورودی می باشند به آن ورودی ها پارامتر می گوییم. پارامتر ها با یک فاصله و یک – (dash) از cmdlet جدا می شوند و حساس به حروف کوچک و بزرگ نمی باشند. پارامتر Identity- در اکثر cmdlet های AD مورد استفاده قرار می گیرد و کاربرد آن تعیین distinguished name یا sAMAccountName است. sAMAccountName همان Pre-Windows 2000 Logon Name می باشد. پس از پارامتر مقدار آن مشخص می گردد. اگر حاوی فاصله است لازم است در کوتیشن ‘  ‘ قرار گیرد. به مثال زیر توجه کنید:

Get-ADGroupMember -Identity “cn=Sales,ou=Groups,dc=contoso,dc=com”
Get-ADGroupMember -Identity Sales

راهنما

برای آنکه اطلاعاتی در خصوص هر cmdlet کسب کنید کافی است از دستور Get-Help استفاده کنید.

Get-Help cmdlet

Get-Help Get-ADGroupMember (مثال)

اشیاء

بر خلاف cmd که تنها یک متن خروجی دارد، خروجی در powershell می تواند یک شیئ یا به عبارت دیگر یک ساختار (construct) باشد. دستور زیر سبب می شود برخی از ویژگی های یک شیئ کاربر نمایش داده شود. مسئله قابل توجه آن است که خروجی فقط قدری نوشته نیست، بلکه حاوی یک شیئ است که می تواند برای یک عملیات به کار گرفته شود. اشیاء می تواند دارای Attribute و Method ها باشند.

Get-ADUser -Identity GetMe

ps3متغیر ها

یک متغیر فضایی از حافظه است که می تواند جهت نگه داری یک مقدار یا شیئ به کار گرفته شود. در PowerShell متغیر ها با حرف $ آغاز می گردند. نام متغیر نیز Case-Sensitive نمی باشد. برای تعریف متغیر فرم عمومی زیر به کار می رود:

$variable = value

اکنون قصد داریم شیئ دریافت شده از دستور قبل را در یک متغیر قرار دهیم:

$catched= Get-ADUser GetMe

ps4

اکنون قصد داریم با استفاده از متغیر ساخته شده، اکانت کاربر GetMe را Disable (غیر فعال) کنیم. برای آنکه قصد داریم مقداری را تنظیم کنیم، از فعل set در ابتدای cmdlet استفاده می شود:

Set-ADUser -Identity $user -Enabled $false

همانطور که حدس می زنید استفاده از متغیر در این مثال الزام آور نبود و امکان استفاده از دستور زیر نیز وجود داشت:

Set-ADUser -Identity GetMe -Enabled $false

PowerShell دارای تعدادی متغییر از پیش تعریف شده است به عنوان مثال، متغییر های true$ و false$ دو نمونه متغییر boolean هستند و یا متغیر $error شامل خطای عملیات می باشد.

خطوط لوله

امکان pipe کردن اشیاء نیز وجود دارد. pipe کردن به آن معنا است که خروجی یک cmdlet به عنوان ورودی یک cmdlet دیگر به کار گرفته شود. به عبارت دقیق تر؛ یک pipline یا خط لوله، عبارت است از: یک کانال میان خروجی یک cmdlet که در یک خط دستور به یک cmdlet منتقل می گردد. به عنوان مثال، دستور فوق را می توان با این بیان نیز وارد کرد:

Get-ADUser GetMe| Set-ADUser -Enabled $false

دستور Get-ADUser شیئ یک کاربر را می گیرد و آن را از طریق لوله | به Set-ADUser منتقل می کند. یک مثال کاربری می تواند غیرفعال کردن تمام اعضای یک گروه باشد.

Get-ADGroupMember -Identity Sales | Set-ADUser -Enabled $false

در این مثال اگر گروه sales یک Nested Group باشد به این معنا که حاوی گروهی دیگری باشد، به دلیل عدم امکان اجرای قسمت دوم pipe دستور با خطا رو به رو می شود و می توان از روش فیلتر کردن خروجی ها با Where-Object این خطا را بر طرف کرد.

لوله ها وحشی می شوند!

عملیات پیچیده تر می تواند شامل تعداد بیشتر pipe باشد و ممکن است شامل توابع، ساختار ها، حلقه ها و شرط ها باشد. اغلب pipeline ها برای راحتی در خواندن و بررسی آن ها بیشتر از یک خط هستند. راه های مختلفی وجود دارد که بتوان یک pipeline را بیش از یک سطر وارد کرد.

۱) علامت ‘ : زمانی که آخرین حرف در یک سطر باشد، PowerShell یک سطر دیگر برای ادامه دستور اختصاص می دهد و دستور را اجرا نمی کند. به عنوان مثال:

Get-ADGroupMember -Identity Sales | `
Set-ADUser -Enabled $false

۲) علامت لوله | : اگر علامت لوله در پایان یک خط باشد، PowerShell تصور می کند دستور نا تمام است و در سطر بعدی ادامه دستور را می توانید وارد کنید. به عنوان مثال:

Get-ADGroupMember -Identity Sales |
Set-ADUser -Enabled $false

۳) آکولاد {} : یک عبارت می تواند در میان دو آکولاد قرار بگیرد و PowerShell تا بسته نشدن آکولاد آن دستور را نا تمام در نظر می گیرد.

زمانی که Prompt به خط دوم برای دستور می رود به صورت << خواهد شد. می توانید خط را خالی رها کنید تا دستور اجرا گردد.

نام های مستعار

PowerShell اجازه می دهد تا یک cmdlet دارای یک نام مستعار (Alias) باشد. به عنوان مثال gsv نام مستعار برای Get-Service است. با استفاده از دستور زیر می توانید لیست Alias ها را برای یک دستور معین مشاهده کنید به طوری که cmdlet دستور می باشد:

Get-Alias -Definition cmdlet

همچنین اگر می خواهید بدانید که نام مستعار مربوط به کدام دستور است می توانید از دستور زیر استفاده کنید. فراموش نکنید که cmdlet های استاندارد دارای فرمت فعل-مفعول اند. در اینجا Alias نام مستعار مورد نظر است:

Get-Alias Alias

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *