PowerShell یک چارچوب اتوماسیون وظایف و مدیریت پیکربندی است که توسط مایکروسافت توسعه یافته و شامل یک شل خط فرمان و یک زبان اسکریپتنویسی مرتبط است. در ابتدا به منظور بهبود مدیریت سیستم برای مدیران سیستم طراحی شده بود، PowerShell یک رابط قدرتمند برای اتوماسیون وظایف و مدیریت پیکربندیهای سیستم با استفاده از اسکریپتها و cmdletها (دستورات سبک) فراهم میکند. در طول سالها، PowerShell در قابلیتها رشد کرده و به طور قابل توجهی تکامل یافته است و بر ادغام آن با فریمورک .NET تأکید دارد و امکان استفاده چندسکویی با PowerShell Core را فراهم میکند.
PowerShell برای اولین بار در سال 2006 به عنوان "Monad" معرفی شد، عمدتاً برای بهبود مدیریت سیستم در ویندوز. این ابزار پلی بین کاربران و فرآیندهای زیرساختی سیستم ایجاد کرد و بر اسکریپتنویسی خط فرمان تمرکز داشت. طراحی آن تحت تأثیر شلهای یونیکس بود و بر برنامهنویسی شیءگرا از طریق قابلیتهای فریمورک .NET تأکید داشت.
با انتشار فریمورک مدیریت ویندوز (WMF) 3.0 در سال 2012، PowerShell قویتر شد و ویژگیهایی مانند جریانهای کاری و ماژولها را معرفی کرد. ورود PowerShell Core (نسخه 6) در سال 2016 یک نقطه عطف مهم بود، زیرا برای اجرا بر روی macOS و Linux طراحی شده بود و دامنه آن را فراتر از اکوسیستم ویندوز گسترش داد.
در حال حاضر، PowerShell به توسعه خود با یک مدل متنباز ادامه میدهد و به توسعهدهندگان در سراسر جهان اجازه مشارکت میدهد. آخرین نسخهها شامل قابلیتهای پیشرفتهای هستند که آن را نه تنها برای مدیریت سیستم، بلکه برای وظایف گستردهتر اسکریپتنویسی و اتوماسیون در پلتفرمهای مختلف مرتبط میسازد. رابطه آن با .NET عمیقتر شده و آن را به عنوان یک ابزار اسکریپتنویسی قدرتمند برای توسعهدهندگان در محیطهای مختلف تثبیت کرده است.
دستورات PowerShell که به عنوان cmdlet شناخته میشوند، از یک الگوی نامگذاری فعل-اسم پیروی میکنند.
Get-Process
PowerShell از لولهکشی پشتیبانی میکند و اجازه میدهد خروجی یک cmdlet به عنوان ورودی به cmdlet دیگر استفاده شود.
Get-Process | Where-Object { $_.CPU -gt 100 }
متغیرها در PowerShell با $
شروع میشوند و میتوانند انواع مختلف داده را نگه دارند.
$greeting = "Hello, World!"
PowerShell به طور بومی از آرایهها و جدولهای هش برای سهولت در دستکاری دادهها پشتیبانی میکند.
$array = @(1, 2, 3)
$hash = @{"key" = "value"}
شما میتوانید توابع قابل استفاده مجدد را در PowerShell تعریف کنید.
function Greet {
param($name)
"Hello, $name!"
}
مدیریت خطا در PowerShell میتواند با استفاده از بلوکهای try/catch انجام شود.
try {
Get-Process -Name "nonexistent"
} catch {
Write-Host "An error occurred: $_"
}
اسکریپتهای PowerShell با پسوند .ps1
ذخیره میشوند و میتوانند به طور مستقیم اجرا شوند.
# myscript.ps1
Write-Host "Running my PowerShell script"
PowerShell دادهها را به عنوان اشیاء در نظر میگیرد و دسترسی و دستکاری ویژگیها را آسان میکند.
$process = Get-Process -Name "powershell"
$process.Id
PowerShell به شما اجازه میدهد توابع را به عنوان ماژولها بستهبندی و توزیع کنید.
Import-Module MyModule
PowerShell از دورکاری پشتیبانی میکند و امکان اجرای دستورات بر روی ماشینهای راه دور را فراهم میکند.
Enter-PSSession -ComputerName Server01
PowerShell بر روی زمان .NET اجرا میشود که اجرای اسکریپتها و cmdletهای PowerShell را به روشی بسیار کارآمد تسهیل میکند.
چندین IDE و ویرایشگر از توسعه PowerShell پشتیبانی میکنند، از جمله:
برای ایجاد یک اسکریپت PowerShell، توسعهدهندگان میتوانند کد خود را در هر ویرایشگر متنی بنویسند و آن را با پسوند .ps1
ذخیره کنند. پروژهها ممکن است شامل چندین اسکریپت و ماژول باشند که در پوشهها سازماندهی شدهاند.
PowerShell به طور گستردهای در بخشهای مختلف برای:
PowerShell با زبانهای برنامهنویسی مختلف ارتباط دارد:
اسکریپتهای PowerShell میتوانند به زبانهایی که از اتوماسیون و وظایف اسکریپتنویسی پشتیبانی میکنند، مانند Python یا Bash، ترجمه شوند. در حالی که هیچ ابزار ترجمه منبع به منبع مستقیمی وجود ندارد، تبدیل دستی میتواند شامل بازنویسی cmdletها به دستورات یا توابع معادل در زبان هدف باشد.
ابزارهای موجود برای ترجمه منبع به منبع شامل: