پاورشل چیست و چگونه باید در ویندوز سرور 2019 از آن استفاده کرد؟

تاریخ انتشار: ۲۷ آذر ۱۳۹۸

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

پاورشل

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

چرا باید از پاورشل استفاده کنیم؟

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

بیشتر عملکردهای یک سرور سرور سنتی به صورت کامندلتس (cmdlets) در پاورشل قرار گرفته‌اند. دستوراتی که اجازه می‌دهند به جای باز کردن پنجره‌های مختلف با اجرای یک دستور همان کار را انجام دهید. از کامندلت‌ها می‌توان برای دریافت اطلاعات از یک سرور و نیز تنظیم اطلاعات و پارامترهای روی سرور استفاده کرد. کامنلدلت‌ها با پیشوندهای get یا set شروع می‌شوند که بیان‌گر نوع کاری است که فرمان انجام می‌دهد.

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

Get-NetIPAddress: با استفاده از این فرمان می‌توانیم آدرس آی‌پی سیستم را مشاهده کنیم.

Set-NetIPAddress: با استفاده از این فرمان می‌توانیم آدرس آی‌پی موجود را ویرایش کنیم.

New-NetIPAddress: این فرمان اجازه می‌دهد تا یک آدرس آی‌پی جدید برای کامپیوتر بسازیم.

Rename-Computer: فرمان فوق سادهرترین راهکاری است که برای تنظیم نام میزبان یک کامپیوتر در دسترس ما قرار دارد.

یکی از کاربردی‌ترین فرمان‌ها پاولشل فرمان Get-Command است. اجرای فرمان فوق خروجی زیر را دارد:

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

Get-Command -Name *IPAddress*

فرمان Get-Command همراه با پارامتر -Name اجازه می‌دهد تا به صورت انتخابی مواردی که به دنبال آن هستید را مشاهده کنید. خروجی فرمان بالا در تصویر زیر نشان داده شده است:

اجرای پاورشل

اولین کاری که باید انجام دهیم اجرای پاورشل است. کنسول پاورشل به‌طور پیش‌فرض در تمامی ویندوزها نصب شده است، بنابراین می‌توانید توسط منوی Start آن‌را اجرا کنید. کافی است در کادر جست‌وجوی ویندوز فرمان powershell را تایپ و کلید اینتر را فشار دهید.

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

خط‌مشی اجرای پیش‌فرض

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

این اتفاق نباید به‌طور عادی در ویندوز سرور 2019 رخ نمی‌دهد، مگر آن‌که یک GPO روی سرور جدید تنظیم کرده باشید یا سعی کرده‌اید اسکریپتی را روی سیستم‌عامل متفاوتی اجرا کنید. دقت کنید در برخی از نسخه‌های ویندوز برای بهبود امنیت ویژگی اجرای اسکریپت‌ها مسدود شده است. اگر با این مشکل روبرو شدید باید به پیغام خطا نگاه کنید، در بیشتر موارد با ویرایش خط‌مشی‌های پیش‌فرض اجرایی (DEP) در پاورشل مشکل حل می‌شود.

در این‌جا ما یک سوییچ روشن یا خاموش نداریم و به جای آن پنج سطح مختلف در DEP در اختیار داریم که و مهم است تفاوت هر یک از این سطوح را به درستی درک کنیم تا امنیت سرورهایمان حفظ شود. توضیحات هر یک از این سطوح به شرح زیر است:

Restricted

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

AllSigned

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

RemoteSigned

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

Unrestricted

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

وضعیت ByPass

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

بسته به نحوه استفاده از اسکریپت‌های پاورشل، بعضی اوقات اجرای یک خط‌مشی واحد پاسخگوی تمام نیازها نیست، برای حل این مشکل DEP‌ها را می‌توان با تنظیم یک Execution Policy Scope به شکل پیکربندی کرد که خط‌مشی‌های اجرایی مختلف بر روی جنبه‌های مختلف سیستم تاثیرگذار باشند. به‌طور مثال، سه حوزه‌ای که می‌توانید آن‌ها ‌را دستکار کنید فرآیند (Process)، کاربرجاری (CurrentUser) و ماشین محلی (LocalMachine) هستند.

اگر اطلاعی درباره خط‌مشی DEP جاری ندارید یا فکر می‌کنید فردی آن‌را تغییر داده است، با اجرای فرمان Get-ExceptionPolicy قادر به مشاهده وضعیت جاری هستید. همان‌گونه که در تصویر زیر مشاهده می‌کنید، خط‌مشی به وضعیت Restricted تنظیم شده که مشخص می‌کند چرا من در اجرای اسکریپت قبلی پیغام خطایی دریافت کردم.

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

Set-ExecutionPolicy Unrestricted 

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

Computer Configuration | Policies | Administrative Templates | Windows Components | Windows PowerShell | Turn on script execution

به‌کارگیری کلید Tab

قبل از پرداختن به مباحث دیگر پاورشل به این موضوع دقت کنید که اگر در محیط فوق چند حرف اول از هر دستور را تایپ کنید و Tab را فشار دهید، باقیمانده نام فرمان به‌طور خودکار روی صفحه نمایش داده می‌شود. اگر فرمان get-co را تایپ کنیم و سپس Tab را فشار دهیم، به سرعت فرمان Get-Command کامل می‌شود. اگر فرمان‌های مشابهی وجود دارد با چندبار فشار دکمه فوق دستورات مختلف نشان داده می‌شوند که قادر به انتخاب آن‌ها هستید.

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

فرمان‌های کاربردی و مفید برای انجام کارهای روزانه

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

Get-Command: برای پیدا کردن دستورات اضافی یا دستوراتی که به دنبال آن‌ها هستید استفاده می‌شود.

Get-Command -Name *example*: با اضافه کردن سوئیچ -Name به انتهای فرمان، قابلیت فرمان فوق افزایش پیدا می‌کند و با فیلتر کردن نتایج تنها دستوراتی که به دنبال آن‌ها هستید را نشان می‌دهد.

GC: نام کوتاه شده‌ای برای Get-Command است. برخی از دستورات پاورشل نام‌های مستعاری همچون gcm دارند که اجازه می‌دهند با تایپ کلیدهای کمتری یک فرمان را اجرا کنید.

Get-Alias: برای مشاهده نام‌های مستعار برای دستورات دیگر پاورشل کافی است دستور Get-Alias را تایپ کنید.

Rename-Computer: برای تغییر نام میزبان سرور استفاده می‌شود.

Add-Computer: از فرمان فوق برای اتصال کامپیوترها یا سرورها به یک دامنه استفاده می‌شود.

Hostname: فرمان فوق نام سیستمی که در حال حاضر از آن استفاده می‌کنید را نشان می‌دهد.            

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

هر دو فرمان shutdown یا Restart-Computer برای خاموش یا راه‌اندازی مجدد سرور مفید هستند.

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

دستور Query user یا Query اغلب در محیط‌های RDS بسیار مفید است، فرمان quser نام تمامی کاربرانی که به‌تازگی به سرور وارد شده‌اند را همراه با ارائه یک گزارش آماری در ارتباط با نحوه ورود (محلی یا راه‌دور) و این‌که نشست چه مدت است که فعال است نشان می‌دهد.

quser / computer: WEB1

استفاده از quser در ترکیب با سوئیچ /computer به شما امکان می‌دهد تا کاربران فعلی که به تازگی به یک سیستم راه دور وارد شده‌اند را مشاهده کنید. به این ترتیب‌، می‌توانید در محیط RDS باشید، اما تمامی نشست‌های کاربران را بدون ورود به سیستم آن‌ها بررسی کنید. شما حتی می‌توانید اسکریپتی بنویسید که این دستور را روی هر نشست سرور میزبان اجرا کند و خروجی را به یک فایل انتقال دهد. از روش فوق به عنوان راهکاری برای گزارش‌گیری و پیگری وضعیت کارمندان یک سیستم می‌توان استفاده کرد.

Install-WindowsFeature پاورشل اجازه می‌دهد به ساده‌ترین شکل نقش‌ها و ویژگی‌ها را روی سرورهای خود نصب کنید. شما می‌توانید از New-NetIPAddress برای اختصاص آدرس آی‌پی به کارت‌های شبکه خود استفاده کنید.

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

New-NetIPAddress -InterfaceIndex 12 -IPAddress 10.10.10.40 -PrefixLength 24 -DefaultGateway 10.10.10.1

در ترکیب با فرمان New-NetIPAddress می‌توان آدرس‌های سرور نام دامنه در ویژگی‌های کارت شبکه را به شرح زیر تنظیم کرد:

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 10.10.10.2,10.10.10.3

اگر فرمان Get-Help را به تنهایی اجرا کنید، اطلاعات مفیدی به دست می‌آورید، اما اگر به دنبال دریافت اطلاعات خاصی در ارتباط با یک فرمان همچون restart-Computer هستید، کافی است از ترکیب نحوی زیر برای دریافت اطلاعات لازم استفاده کنید. 

Get-Help Restart-Computer 

اطلاعاتی که Get-Help برای یک تابع ارائه می‌کنند کاملا جامع هستند و به وضوح شرح می‌دهند که چگونه باید از یک تابع استفاده کنید.