Dariush Tasdighi - داریوش تصدیقی
Dariush Tasdighi - داریوش تصدیقی
خواندن ۱۰ دقیقه·۴ سال پیش

ابزار قدرتمند PowerShell: فلسفه، تاریخچه، نصب و راه‌اندازی و یک مثال جذاب و کاربردی

توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل می‌شود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا می‌کنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم.
با کمال تشکر
داریوش تصدیقی
کانال تلگرام: IranianExperts@
شماره تلفن همراه: ۰۹۱۲۱۰۸۷۴۶۱
نشانی پست الکترونیکی: DariushT@GMail.com
فیلم‌های آموزشی https://www.aparat.com/DariushT
آدرس سایت‌ها: https://WebsiteAnalytics.ir - http://IranianExperts.ir - http://Date2Date.ir
نسخه مقاله: ۱.۰ - تاریخ بروزرسانی: ۱۳۹۹/۰۳/۰۵

فلسفه PowerShell

تا قبل از Windows Server 2003 SP1، هر عملیات سیستمی، که می‌خواستیم انجام دهیم، فقط از طریق محیط گرافیکی ویندوز امکان‌پذیر بود. هر چند که با وجود Windows Command Prompt، می‌توانستیم به جای محیط Windows Explorer، و با استفاده از دستورات dir، فهرست فایل‌ها و پوشه‌های ویندوز را مشاهده کرده و با دستوری مانند md، اقدام به ایجاد یک پوشه نماییم و غیره، ولی این محیط Windows Command Prompt و مجموعه دستورات آن (DOS)، بسیار ضعیف و محدود بودند!

شاید یکی از مهم‌ترین دلایلی که متخصصین شبکه، از سیستم‌عامل ویندوز، دلسرد شده (فارغ از مباحث امنیتی و رایگان بودن و غیره) و به سیستم‌عامل لینوکس (Linux)، علاقه‌مند شده بودند، همین ضعف Windows Command Prompt بود. هر چند که ما می‌توانیم (می‌توانستیم) به زیبایی و در حالی که به پشتی صندلی خود تکیه داده‌ایم و با استفاده از ماوس، در محیط ویندوز، بر روی My Computer = This PC، دکمه سمت راست ماوس را زده، گزینه Manage را انتخاب کرده و سپس از طریق انتخاب گزینه Local Users and Groups، اقدام به ایجاد گروه‌ها و حساب‌های کاربری نماییم! ولی زمانی که مسئول یک شبکه کامپیوتری بزرگ هستیم و باید بیش از ۱۰۰۰ حساب کاربری و ۱۰۰ گروه کاربری تعریف نماییم، این روال گرافیکی و جذاب، تقریبا ما را دیوانه می‌کند! در صورتی که از همان ابتدا در محیط لینوکس، می‌توانستیم با استفاده از یک دستور ساده add-user در محیط ترمینال (SHELL)، اقدام به ایجاد یک حساب کاربری کرده و یا با استفاده از فایل‌های sh لینوکس، چیزی شبیه Batch File، ایجاد کرده و با استفاده از یک دستور حلقه، اقدام به ایجاد هزاران حساب کاربری و گروه‌های کاربری نماییم!

این جذابیت لینوکس که اجازه می‌داد که تقریبا هر کاری که می‌توان در محیط گرافیکی آن انجام داد را در محیط ترمینال آن، و با استفاده از دستورات انجام دهیم و چه بسا کارهایی را انجام دهیم که حتی در محیط گرافیکی نیز امکان‌پذیر نبود! ویندوز را بر آن داشت که نسبت به ایجاد یک محیط قدرتمندتر از Windows Command Prompt، اقدامی اساسی کند. مایکروسافت در اولین اقدام PowerShell نسخه یک را در محیط ویندوز ایجاد کرد و پس از آن در محیط ویندوز، ما شاهد دو محیط برای اجرای دستورات بودیم!

  • محیط Windows Command Prompt
  • محیط Windows PowerShell

در محیط Windows PowerShell، ضمن آن‌که تمامی دستورات DOS، قابلیت اجرا داشتند، مجموعه دستورات PowerShell، توجه اکثر متخصصین شبکه و حتی برنامه‌نویسان را به خود جلب کرد! تا جایی که در آخرین نسخه PowerShell، یعنی نسخه ۷ آن، تقریبا هر کاری که در محیط گرافیکی ویندوز و به صورت Wizard، انجام می‌دهیم، معادل آن، دستوری در این محیط قدرتمند وجود دارد!

پاورشل تا نسخه ۴، به صورت Native، توسعه پیدا کرد و برای اولین بار، مایکروسافت برای توسعه نسخه ۵ از DOT NET Framework استفاده کرد. مایکروسافت در نسخه ۵.۱، دو نسخه از پاورشل را منتشر نمود، یک نسخه به اصطلاح Desktop که کماکان با DOT NET Framework، توسعه پیدا کرده بود و یک نسخه به نام Core، که با اولین نسخه DOT NET Core ایجاد شده بود. مایکروسافت نسخه ۶ را کمی تغییر نام داد و نام آن‌را PowerShell Core 6.0 قرار داد و صرفا از DOT NET Core، آن هم نسخه ۲ برای توسعه آن استفاده کرده. این روال تا نسخه ۶.۲ نیز ادامه داشت، تا در نهایت مجددا در نسخه ۷، نام آنٰ‌را به اختصار PowerShell 7 نام نهاد. مایکروسافت در این نسخه از DOT NET Core 3.1 استفاده کرد و از آنجایی که مدت‌هاست که تصمیم گرفته که از حالت دو نسخه‌ای DOT NET Framework (آخرین نسخه آن ۴.۸) و DOT NET Core (آخرین نسخه آن ۳.۱) خارج شود، به زودی نسخه DOT NET 5 را منتشر خواهد کرد که در واقع نسخه یکی شده این دو خواهد بود. به همین دلیل نیز از اضافه کردن کلمه Core، به ادامه کلمه PowerShell اجنتاب کرد!

از آن‌جایی که DOT NET Core، یک بستر Cross Platform می‌باشد! و برنامه‌هایی که با این فریم‌ورک ایجاد می‌شوند، قابلیت اجرا شدن در محیط‌های لینوکس و iOS را دارند، خصوصا از نسخه ۶ پاورشل، بسیاری از کاربران لینوکس و iOS نیز به این ابزار علاقه‌مند شده و از آن در سیستم‌عامل‌های خود استفاده می‌کنند. خصوصا کسانی که به هر شکل، در طول روز، با سیستم‌عامل‌های متنوعی سر و کار دارند! و به جای این‌که مثلا در سیستم‌عامل لینوکس حفظ کنند که برای نمایش فایل‌ها و پوشه‌ها، دستوری به نام ls‌ وجود دارد و در سیستم‌عامل ویندوز، دستوری به نام dir وجود دارد، اگر بر روی دستورات پاورشل، سرمایه‌گذاری کنند، به راحتی با نوشتن دستور Get-ChildItem می‌توانند به مقصود خود در هر سیستم‌عاملی برسند!

تاریخچه مختصری از PowerShell

PowerShell 1.0

تاریخ انتشار:‌۲۰۰۶

زبان‌برنامه‌نویسی: Native

تعداد دستورات: ۱۲۹

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

  • Windows Vista
  • Windows XP SP2
  • Windows Server 2008
  • Windows Server 2003 SP1

PowerShell 2.0

تاریخ انتشار:‌۲۰۰۸

زبان‌برنامه‌نویسی: Native

تعداد دستورات: ۶۳۲

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

  • Windows 7
  • Windows XP SP3
  • Windows Vista SP1
  • Windows Server 2008 R2
  • Windows Server 2003 SP2

PowerShell 3.0

تاریخ انتشار: ۲۰۱۲

زبان‌برنامه‌نویسی: Native

تعداد دستورات: بیش از ۱۰۰۰ دستور

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

  • Windows 8
  • Windows 7 SP1
  • Windows Server 2012
  • Windows Server 2008 SP1
  • Windows Server 2008 R2 SP1

PowerShell 4.0

تاریخ انتشار:‌۲۰۱۴

زبان‌برنامه‌نویسی: Native

تعداد دستورات: بیش از ۱۰۰۰ دستور

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

  • Windows 8.1
  • Windows 7 SP1
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2008 SP1
  • Windows Server 2008 R2 SP1

PowerShell 5.0

تاریخ انتشار:‌۲۰۱۶

زبان‌برنامه‌نویسی: DOT Net Framework

تعداد دستورات: بیش از ۱۳۰۰ دستور

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

  • Windows 8.1
  • Windows Server 2016

PowerShell 5.1

تاریخ انتشار:‌۲۰۱۷

زبان‌برنامه‌نویسی:

  • نسخه Desktop: استفاده از DOT NET Framework
  • نسخه Core: استفاده از DOT NET Core 1.0

تعداد دستورات: ۱۵۸۶

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

  • Windows 10
  • Windows 8
  • Windows 8.1
  • Windows 7 SP1
  • Windows Server 2016
  • Windows Server 2008
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016 Nano Server

PowerShell Core 6.0

تاریخ انتشار:‌۲۰۱۸

زبان‌برنامه‌نویسی: DOT NET Core 2.0

تعداد دستورات: بیش از ۱۸۰۰ دستور

نکته: PowerShell رسما از این نسخه Cross Platform شد!

PowerShell Core 6.1

تاریخ انتشار:‌۲۰۱۹

زبان‌برنامه‌نویسی: DOT NET Core 2.1

تعداد دستورات: بیش از ۱۹۰۰ دستور

این نسخه نیز Cross Platform می‌باشد!

PowerShell Core 6.2

تاریخ انتشار:‌۲۰۱۹

زبان‌برنامه‌نویسی: DOT NET Core 2.2

تعداد دستورات: بیش از ۱۹۰۰ دستور

این نسخه نیز Cross Platform می‌باشد!

PowerShell 7.0

تاریخ انتشار:‌۲۰۱۹

زبان‌برنامه‌نویسی: DOT NET Core 3.1

تعداد دستورات: کاهش دستورات به ۱۵۰۷ دستور!

این نسخه نیز Cross Platform می‌باشد!

نصب و راه‌اندازی

برای نصب و راه‌اندازی نسخه دلخواه PowerShell می‌توانیم به نشانی ذیل مراجعه نماییم:

https://github.com/PowerShell/PowerShell

https://github.com/PowerShell/PowerShell

برای دریافت اطلاعات از امکانات PowerShell می‌توانیم به نشانی ذیل مراجعه نماییم:

https://docs.microsoft.com/en-us/powershell/scripting/learn/ps101/powershell.exe-command-line-help?view=powershell-7

https://docs.microsoft.com/en-us/powershell/scripting/learn/ps101/powershell.exe-command-line-help?view=powershell-7

یک آموزش کاربردی برای شروع کار با PowerShell

در خیلی از مواقع این اتفاق رخ می‌دهد! زمانی که به شرکت یا سازمانی می‌رویم، و می‌خواهیم Laptop خود را به شبکه آن شرکت متصل نماییم، از ما می‌خواهند که DNS سیستم خود را (کارت شبکه‌ای که قرار است به شبکه آن‌ها و یا اینترنت متصل شویم) تغییر دهیم! فرآیند این کار هر چند که در محیط ویندوز کاملا گرافیکی و به صورت Wizard می‌باشد، ولی وقتی که قرار است هر بار کل آن مسیر را با کلیک و دابل کلیک طی کرده و سپس اقدام به نوشتن DNS مذکور کرده و یا آن‌را هر بار پاک (حذف) نماییم، جدا آزار دهنده است! فارغ از این اتفاق که به کرات رخ می‌دهد، شاید اکثر شما عزیزان با سایت شکن آشنایی داشته باشید! سایت شکن:

https://shecan.ir/

https://shecan.ir/

یک سایت فوق‌العاده است که به ما این امکان را می‌دهد که با تغییر دادن DNS، کارت شبکه‌ای که به اینترنت متصل می‌باشد، به سایت‌هایی ورود نماییم که ایران را فیلتر کرده‌اند! به هر حال، ما همیشه احتیاج به این IP های DNS نداریم! و برای این‌که هربار مجبور نباشیم که آن‌ها را بر روی کارت شبکه مورد نظر Set کرده و سپس آن‌ها را حذف نماییم، می‌توانیم از دستورات PowerShell استفاده نماییم.

برای این منظور، قبل از آن‌که دستورات PowerShell را اجرا نماییم، محیط PowerShell را (برای این‌که برای اجرای بعضی از دستورات دچار خطای Permission نشویم!) به صورت Run as Administrator اجرا می‌کنیم:

دستور ذیل، فهرست تمام Interface های شبکه را به ما نمایش می‌دهد. ما به دستور ذیل نیاز داریم، چرا که در ادامه راه، می‌خواهیم از طریق دستورات PowerShell اعلام نماییم که می‌خواهیم DNS مورد نظر را بر روی کدام Interface، ثبت نماییم:

Get-NetAdapter

البته برای این آموزش، می‌توانیم از دستور ذیل استفاده کرده، تا صرفا اینترفیس‌های فیزیکی (مانند کارت شبکه Ethernet و کارت شبکه بی‌سیم) نمایش داده شود:

Get-NetAdapter -physical

از آن‌جایی که در این مقاله، می‌خواهم DNS را بر روی کارت شبکه بی‌سم (Wireless)، تنظیم نمایم، با استفاده از یکی از دستورات فوق، اندیس Interface آن‌را (در این مثال شماره ۹) را بدست می‌آورم!

با استفاده از دستور ذیل، می‌توانیم DNS ای که بر روی Interface‌ مورد نظر (در این مثال کارت شبکه بی‌سیم)، تنظیم شده است را مشاهده نماییم:

Get-DnsClientServerAddress -InterfaceIndex 9

با استفاده از دستور ذیل، می‌توانیم DNS مورد نظر خود را (در این مثال DNS مربوط به سایت شکن!) بر روی Interface مورد نظر (در این مثال کارت شبکه بی‌سیم) تنظیم نماییم:

Set-DnsClientServerAddress -InterfaceIndex 9 -ServerAddresses (&quot178.22.122.100&quot,&quot185.51.200.2&quot)

می‌توانیم پس از اجرای دستور فوق، مجدد از دستور ذیل استفاده کرده و از تنظیم شدن DNS جدید، اطمینان حاصل نماییم:

Get-DnsClientServerAddress -InterfaceIndex 9

برای این‌که DNS تنظیم شده را حذف کرده و اصطلاحا DNS تنظیم شده را Reset نماییم، می‌توانیم از دستور ذیل استفاده نماییم:

Set-DnsClientServerAddress -InterfaceIndex 9 -ResetServerAddresses

مجددا می‌توانیم با استفاده از دستور ذیل، از حذف شدن DNS مذکور، اطمینان حاصل کنیم:

Get-DnsClientServerAddress -InterfaceIndex 9

پایان

powershellterminalcross platformpower shell
محقق، معمار، مشاور، مدرس و برنامه‌نویس حوزه فن‌آوری اطلاعات - تحلیل‌گر و فعال بازار بورس و سرمایه
شاید از این پست‌ها خوشتان بیاید