از لحاظ تاریخی، ابزارهای خط فرمان در سیستم های یونیکس بهتر از ویندوز توسعه یافته اند، اما با ظهور یک راه حل جدید، وضعیت تغییر کرده است.
Windows PowerShell به مدیران سیستم اجازه می دهد تا اکثر کارهای معمول را خودکار کنند. با استفاده از آن می توانید تنظیمات را تغییر دهید، سرویس ها را متوقف و شروع کنید و همچنین در اکثر برنامه های نصب شده تعمیر و نگهداری را انجام دهید. اشتباه است که پنجره آبی را به عنوان مفسر دستور دیگری درک کنیم. این رویکرد ماهیت نوآوری های پیشنهادی مایکروسافت را منعکس نمی کند. در واقع، امکانات Windows PowerShell بسیار گسترده تر است: در یک سری مقالات کوتاه، ما سعی خواهیم کرد تفاوت راه حل مایکروسافت را با ابزارهایی که بیشتر با آنها آشنا هستیم، دریابیم.
ویژگی های اصلی
البته، Windows PowerShell در درجه اول یک پوسته فرمان با یک زبان برنامه نویسی است که در ابتدا بر روی .NET Framework و بعداً بر روی NET Core ساخته شد. برخلاف پوستههایی که دادههای متنی را میپذیرند و برمیگردانند، Windows PowerShell با کلاسهای داتنت کار میکند که دارای ویژگیها و متدهایی هستند. PowerShell به شما اجازه می دهد تا دستورات رایج را اجرا کنید و همچنین به شما امکان دسترسی به اشیاء COM، WMI و ADSI را می دهد. برای دسترسی به آنها از حافظه های مختلف مانند سیستم فایل یا رجیستری ویندوز استفاده می کند که به اصطلاح. تامین کنندگان شایان ذکر است که امکان تعبیه مولفه های اجرایی PowerShell در سایر برنامه ها برای اجرای عملیات های مختلف، از جمله. از طریق رابط گرافیکی عکس این موضوع نیز صادق است: بسیاری از برنامه های کاربردی ویندوز از طریق PowerShell به رابط های مدیریتی خود دسترسی دارند.
Windows PowerShell به شما اجازه می دهد:
- تغییر تنظیمات سیستم عامل؛
- مدیریت خدمات و فرآیندها؛
- پیکربندی نقش ها و اجزای سرور؛
- نصب نرم افزار؛
- مدیریت نرم افزار نصب شده از طریق رابط های ویژه.
- جاسازی اجزای اجرایی در برنامه های شخص ثالث؛
- ایجاد اسکریپت برای خودکار کردن وظایف مدیریت.
- با سیستم فایل، رجیستری ویندوز، فروشگاه گواهی و غیره کار کنید.
پوسته و محیط توسعه
Windows PowerShell به دو صورت وجود دارد: علاوه بر شبیه ساز کنسول با پوسته فرمان، یک محیط اسکریپت یکپارچه (ISE) نیز وجود دارد. برای دسترسی به رابط خط فرمان، کافی است میانبر مناسب را از منوی ویندوز انتخاب کنید یا powershell.exe را از منوی Run اجرا کنید. یک پنجره آبی روی صفحه ظاهر می شود که به طور قابل توجهی از نظر قابلیت با cmd.exe ضد غرق تفاوت دارد. تکمیل خودکار و سایر ویژگیهای آشنا برای کاربران پوسته فرمان برای سیستمهای یونیکس وجود دارد.
برای کار با پوسته، باید چند میانبر صفحه کلید را به خاطر بسپارید:
- فلش های بالا و پایین در تاریخ حرکت می کنند تا دستورات قبلاً تایپ شده را تکرار کنند.
- فلش سمت راست در انتهای یک خط، نویسه به کاراکتر دستور قبلی را دوباره تایپ می کند.
- Ctrl+Home متن تایپ شده را از موقعیت مکان نما تا ابتدای خط حذف می کند.
- Ctrl+End متن را از مکان نما تا انتهای خط حذف می کند.
F7 پنجره ای با دستورات تایپ شده را نشان می دهد و به شما امکان می دهد یکی از آنها را انتخاب کنید. این کنسول همچنین با انتخاب متن با ماوس، کپی-پیست، مکان نما، حذف، پساسپیس کار میکند - همه چیزهایی که دوست داریم.
Windows PowerShell ISE یک محیط توسعه کامل با ویرایشگر کد زبانهدار و برجستهشده با نحو، سازنده دستور، اشکالزدای داخلی و سایر لذتهای برنامهنویسی است. اگر یک خط فاصله بعد از نام فرمان در ویرایشگر محیط توسعه بنویسید، تمام گزینه های موجود را در لیست کشویی با نشانی از نوع دریافت خواهید کرد. می توانید PowerShell ISE را از طریق میانبر از منوی سیستم یا با استفاده از فایل اجرایی powershell_ise.exe راه اندازی کنید.
Cmdlets
در Windows PowerShell به اصطلاح. cmdlet ها اینها کلاس های تخصصی دات نت هستند که عملکردهای مختلفی را ارائه می دهند. آنها Action-Object (یا فعل-اسم، در صورت تمایل) نامیده می شوند، و پیوند جدا شده با خط فاصله شبیه گزاره و موضوع در جملات زبان طبیعی است. به عنوان مثال، Get-Help در لغت به معنای "دریافت کمک" است، یا در زمینه PowerShell: "نمایش کمک". در واقع، این یک آنالوگ از دستور man در سیستم های یونیکس است و کتابچه های راهنما در PowerShell باید به این صورت درخواست شوند، نه با فراخوانی cmdlet ها با کلید --help یا /.. مستندات آنلاین PowerShell را فراموش نکنید: مایکروسافت آن را کاملاً دقیق ارائه کرده است.
علاوه بر Get، cmdlet ها از افعال دیگری نیز برای نشان دادن اعمال (و نه فقط افعال، به بیان دقیق) استفاده می کنند. در لیست زیر چند مثال می آوریم:
Add
- اضافه کردن؛
Clear
- تمیز؛
Enable
- روشن کن؛
Disable
- خاموش کن؛
New
- ايجاد كردن؛
Remove
- حذف؛
Set
- پرسیدن؛
Start
- اجرا کن؛
Stop
- متوقف کردن؛
Export
- صادرات؛
Import
- وارد كردن.
cmdlet های سیستمی، کاربر و اختیاری وجود دارد: در نتیجه اجرا، همگی یک شی یا آرایه ای از اشیاء را برمی گردانند. آنها به حروف کوچک و بزرگ حساس نیستند، یعنی. از دیدگاه مفسر دستور، تفاوتی بین Get-Help و get-help وجود ندارد. کاراکتر ';' برای جداسازی استفاده می شود، اما قرار دادن آن تنها در صورتی الزامی است که چندین cmdlet در یک خط اجرا شوند.
cmdlet های Windows PowerShell در ماژول ها (NetTCPIP، Hyper-V، و غیره) گروه بندی می شوند، و یک cmdlet Get-Command برای جستجو بر اساس شی و عمل وجود دارد. می توانید راهنمایی برای آن را به این صورت نمایش دهید:
Get-Help Get-Command
بهطور پیشفرض، دستور راهنمای مختصر را نمایش میدهد، اما پارامترها (آرگومنتها) در صورت نیاز به cmdletها ارسال میشوند. با کمک آنها می توانید به عنوان مثال کمک دقیق (پارامتر -Detailed) یا کامل (پارامتر -Full) و همچنین نمونه هایی را نمایش دهید (parameter -Examples):
Get-Help Get-Command -Examples
راهنما در Windows PowerShell با cmdlet Update-Help به روز می شود. اگر خطی از دستورات بیش از حد طولانی باشد، آرگومان های cmdlet را می توان با نوشتن کاراکتر سرویس «`» و فشار دادن Enter به خط بعدی منتقل کرد - صرفاً نوشتن یک دستور در یک خط و ادامه دادن در خط دیگر کار نخواهد کرد.
در اینجا چند نمونه از cmdlet های رایج آورده شده است:
Get-Process
- نمایش فرآیندهای در حال اجرا در سیستم؛
Get-Service
- نمایش خدمات و وضعیت آنها؛
Get-Content
- نمایش محتویات فایل
برای cmdlet های پرکاربرد و ابزارهای خارجی، Windows PowerShell دارای مترادف های کوتاه است - نام مستعار (از انگلیسی. مستعار). به عنوان مثال، dir یک نام مستعار برای Get-ChildItem است. لیست مترادف ها همچنین شامل آنالوگ دستورات از سیستم های یونیکس (ls، ps و غیره) است و cmdlet Get-Help با دستور help فراخوانی می شود. لیست کاملی از مترادف ها را می توان با استفاده از cmdlet Get-Alias مشاهده کرد:
اسکریپت ها، توابع، ماژول ها و زبان PowerShell
اسکریپت های Windows PowerShell به صورت فایل های متنی ساده با پسوند ps1. ذخیره می شوند. شما نمی توانید آنها را با دوبار کلیک اجرا کنید: برای باز کردن منوی زمینه باید کلیک راست کرده و "Run in PowerShell" را انتخاب کنید. از کنسول یا باید مسیر کامل اسکریپت را مشخص کنید یا به دایرکتوری مناسب بروید و نام فایل را بنویسید. اجرای اسکریپت ها نیز توسط سیاست سیستم محدود شده است و برای بررسی تنظیمات فعلی می توانید از cmdlet Get-ExecutionPolicy استفاده کنید که یکی از مقادیر زیر را برمی گرداند:
Restricted
- راه اندازی اسکریپت ها غیرفعال است (به طور پیش فرض)؛
AllSigned
- فقط راه اندازی اسکریپت های امضا شده توسط یک توسعه دهنده قابل اعتماد مجاز است.
RemoteSigned
- مجاز به اجرای اسکریپت های امضا شده و خود.
Unrestricted
- مجاز به اجرای هر اسکریپت
مدیر دو گزینه دارد. امن ترین شامل امضای اسکریپت ها است، اما این یک جادوی کاملا جدی است - ما در مقالات بعدی با آن برخورد خواهیم کرد. حال بیایید مسیر کمترین مقاومت را در پیش بگیریم و سیاست را تغییر دهیم:
Set-ExecutionPolicy RemoteSigned
برای انجام این کار، PowerShell باید به عنوان یک مدیر اجرا شود، اگرچه میتوانید خطمشی را برای کاربر فعلی با یک تنظیم خاص تغییر دهید.
اسکریپت ها در یک زبان برنامه نویسی شی گرا نوشته می شوند که دستورات آن بر اساس همان اصل cmdlet هایی که قبلاً مورد بحث قرار گرفت نام گذاری می شوند: "Action-Object" ("Fer-Noun"). هدف اصلی آن خودکار کردن وظایف اداری است، اما یک زبان تفسیری کامل است که تمام ساختارهای لازم را دارد: پرش شرطی، حلقه ها، متغیرها، آرایه ها، اشیا، مدیریت خطا و غیره. هر ویرایشگر متنی برای اسکریپت مناسب است، اما بهتر است Windows PowerShell ISE را اجرا کنید.
می توانید پارامترها را به اسکریپت ارسال کنید، آنها را مورد نیاز قرار دهید و مقادیر پیش فرض را تنظیم کنید. علاوه بر این، Windows PowerShell به شما این امکان را می دهد که با استفاده از ساختار Function و بریس های فرفری، توابع را مانند cmdlet ها ایجاد و فراخوانی کنید. یک اسکریپت با توابع ماژول نامیده می شود و دارای پسوند .psm1 است. ماژول ها باید در دایرکتوری های تعریف شده در متغیرهای محیطی PowerShell ذخیره شوند. با دستور زیر می توانید آنها را مشاهده کنید:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSize
نوار نقاله
در مثال آخر، ما از ساختاری استفاده کردهایم که برای کاربران پوسته یونیکس آشناست. در Windows PowerShell، نوار عمودی همچنین به شما امکان می دهد خروجی یک دستور را به ورودی فرمان دیگر منتقل کنید، اما تفاوت قابل توجهی در اجرای خط لوله وجود دارد: ما دیگر در مورد مجموعه ای از کاراکترها یا نوعی از کاراکترها صحبت نمی کنیم. متن cmdlet های داخلی یا توابع تعریف شده توسط کاربر، اشیا یا آرایه هایی از اشیاء را برمی گرداند و همچنین می تواند آنها را به عنوان ورودی دریافت کند. مانند پوسته Bourne و بسیاری از جانشینان آن، PowerShell کارهای پیچیده را با خط لوله آسان می کند.
ساده ترین مثال خط لوله به این صورت است:
Get-Service | Sort-Object -property Status
ابتدا cmdlet Get-Service اجرا می شود و سپس تمامی سرویس های دریافت شده توسط آن برای مرتب سازی بر اساس ویژگی Status به cmdlet Sort-Object ارسال می شود. اینکه نتیجه بخش قبلی خط لوله به کدام آرگومان ارسال می شود بستگی به نوع آن دارد - معمولاً InputObject است. این موضوع در مقاله ای که به زبان برنامه نویسی پاورشل اختصاص دارد با جزئیات بیشتری مورد بحث قرار خواهد گرفت.
در صورت تمایل می توانید زنجیره را ادامه دهید و نتیجه عملیات Sort-Object را به cmdlet دیگری منتقل کنید (از چپ به راست اجرا می شوند). به هر حال، کاربران ویندوز همچنین به ساختاری برای صفحه بندی آشنا برای همه Unixoid ها دسترسی دارند:
Get-Service | Sort-Object -property Status | more
اجرای وظایف در پس زمینه
اغلب اوقات لازم است دستور خاصی را در پس زمینه اجرا کنید تا منتظر نتیجه اجرای آن در جلسه پوسته نباشید. Windows PowerShell چندین cmdlet برای این مورد دارد:
Start-Job
- راه اندازی یک کار پس زمینه؛
Stop-Job
- توقف یک کار پس زمینه؛
Get-Job
- مشاهده لیست وظایف پس زمینه؛
Receive-Job
- مشاهده نتیجه اجرای کار پس زمینه؛
Remove-Job
- حذف یک کار پس زمینه؛
Wait-Job
- انتقال کار پس زمینه به کنسول.
برای شروع یک کار پسزمینه، از cmdlet Start-Job استفاده میکنیم و یک دستور یا مجموعهای از دستورات را در پرانتزهای فرفری مشخص میکنیم:
Start-Job {Get-Service}
کارهای پس زمینه در Windows PowerShell را می توان با دانستن نام آنها دستکاری کرد. ابتدا بیایید نحوه نمایش آنها را بیاموزیم:
Get-Job
حالا بیایید نتیجه کار Job1 را نشان دهیم:
Receive-Job Job1 | more
همه چیز بسیار ساده است.
اجرای دستور از راه دور
Windows PowerShell به شما اجازه می دهد تا دستورات و اسکریپت ها را نه تنها در رایانه محلی، بلکه بر روی یک رایانه راه دور و حتی در کل گروهی از ماشین ها اجرا کنید. راه های مختلفی برای این کار وجود دارد:
- بسیاری از cmdlet ها دارای یک پارامتر هستند
-ComputerName
، اما به این ترتیب نمی توان مثلاً یک نوار نقاله ایجاد کرد. - Cmdlet
Enter-PSSession
به شما امکان می دهد یک جلسه تعاملی در یک ماشین راه دور ایجاد کنید. - با استفاده از cmdlet
Invoke-Command
می توانید دستورات یا اسکریپت ها را روی یک یا چند کامپیوتر راه دور اجرا کنید.
نسخه های PowerShell
PowerShell از اولین انتشار خود در سال 2006 تغییرات زیادی کرده است. این ابزار برای بسیاری از سیستمهایی که روی پلتفرمهای سختافزاری مختلف اجرا میشوند (x86، x86-64، Itanium، ARM) در دسترس است: Windows XP، Windows Server 2003، Windows Vista، Windows Server 2008/2008 R2، Windows 7، Windows 8، Windows 8.1، Windows RT، Windows RT 8.1، Windows Server 2012/2012 R2، Windows 10، Windows Server 2016، GNU/Linux و OS X. آخرین نسخه 6.2 منتشر شده در 10 ژانویه 2018. اسکریپت های نوشته شده برای نسخه های قبلی احتمالاً در نسخه های بعدی کار می کنند، اما backporting می تواند مشکل ساز باشد زیرا PowerShell تعداد زیادی cmdlet جدید را در طول سال های توسعه معرفی کرده است. با استفاده از ویژگی PSVersion متغیر داخلی $PSVersionTable می توانید نسخه پوسته فرمان نصب شده روی رایانه را پیدا کنید:
$PSVersionTable.PSVersion
همچنین می توانید از cmdlet استفاده کنید:
Get-Variable -Name PSVersionTable –ValueOnly
همین کار با cmdlet Get-Host انجام می شود. در واقع، گزینه های زیادی وجود دارد، اما برای استفاده از آنها باید زبان برنامه نویسی PowerShell را یاد بگیرید، که در ادامه این کار را انجام خواهیم داد.
نمایش نتایج: از
مایکروسافت موفق به ایجاد یک پوسته واقعا قدرتمند با یک محیط یکپارچه مناسب برای توسعه اسکریپت ها شده است. این ابزار با ابزارهای آشنای ما در دنیای یونیکس با یکپارچگی عمیق با سیستم عامل های خانواده ویندوز و همچنین با نرم افزار آنها و پلت فرم NET Core متفاوت است. PowerShell را می توان یک پوسته شی گرا نامید زیرا cmdlet ها و توابع تعریف شده توسط کاربر اشیاء یا آرایه هایی از اشیاء را برمی گرداند و می تواند آنها را به عنوان ورودی دریافت کند. ما فکر می کنیم که همه مدیران سرور در ویندوز باید این ابزار را داشته باشند: زمانی که آنها می توانستند بدون خط فرمان انجام دهند گذشته است. یک پوسته کنسول پیشرفته به ویژه مورد نیاز است
فقط کاربران ثبت نام شده می توانند در نظرسنجی شرکت کنند.
در مقالات بعدی این مجموعه ابتدا به چه موضوعاتی باید پرداخته شود؟
-
٪۱۰۰برنامه نویسی در PowerShell123
-
٪۱۰۰توابع و ماژول های PowerShell98
-
٪۱۰۰چگونه اسکریپت های خود را امضا کنیم؟51
-
٪۱۰۰کار با مخازن از طریق ارائه دهندگان (ارائه دهندگان) 28
-
٪۱۰۰خودکارسازی مدیریت کامپیوتر با PowerShell133
-
٪۱۰۰مدیریت نرم افزار و جاسازی فایل های اجرایی PowerShell در محصولات شخص ثالث71
231 کاربر رای دادند. 37 کاربر رای ممتنع دادند.
منبع: www.habr.com