استفاده از PowerShell برای کاربران خانگی - راهنمای مبتدیان

چه کسی دوست ندارد که آنها یک جادوگر باشند و چند کلمه به زبان بیاورند تا اتفاقات جادویی رخ دهد؟ خوب(Well) ، ما نمی توانیم به شما نشان دهیم که چگونه یک جادوگر باشید، اما می توانیم به شما نشان دهیم که چگونه یک جادوی کوچک کامپیوتری انجام دهید.

اگر یک رایانه ویندوزی دارید که ویندوز (Windows)7(Windows 7) روی آن نصب شده است، PowerShell دارید(PowerShell) . همچنین، اگر رایانه ای با ویندوز 7(Windows 7) دارید، لطفاً برای امنیت آن را به روز کنید.

اما این مقاله فقط برای کاربران ویندوز(Windows) نیست. آخرین نسخه PowerShell رایگان است و می‌توان آن را روی رایانه‌های Mac و Linux نصب و استفاده کرد.

این مهم است زیرا آنچه در مورد PowerShell یاد می گیرید اکنون تقریباً در هر رایانه ای قابل استفاده است. چه کسی می داند؟ شما ممکن است این مهارت را به سطح بالاتری ببرید و به حرفه ای در فناوری اطلاعات(Information Technology) بپردازید.

پاورشل چیست؟

پاسخ پیشرفته مایکروسافت(Microsoft) این است که این یک پوسته خط فرمان است که مخصوصاً برای مدیران سیستم طراحی شده است. ترسناک به نظر می رسد . (” Sounds)اما اینطور نیست. آیا از کامپیوتر خود مراقبت می کنید؟ بله، پس شما مدیر سیستم در خانه خود هستید.

آیا به کامپیوتر خود می گویید که با کلیک و زدن کلید چه کاری انجام دهد؟ بله، پس پوسته خط فرمان را فقط پنجره دیگری در نظر بگیرید که در آن چیزهایی را تایپ می کنید تا به رایانه خود بگویید چه کاری انجام دهد. شما می توانید این کار را انجام دهید.

PowerShell مانند یک زبان برنامه نویسی است، اما نه به رمز و راز بسیاری. این واقعاً بسیار شبیه به انگلیسی(English) معمولی می‌خواند ، چیزی که مایکروسافت(Microsoft) برای آن تلاش می‌کرد تا توسط غیربرنامه‌نویس‌ها قابل دریافت باشد.

این روشی برای نوشتن چند خط دستور است که اسکریپت نامیده می شود تا سیستم عامل ویندوز(Windows) کاری را انجام دهد که شما می خواهید. سپس، می توانید آن خطوط را در یک فایل ذخیره کنید و با یک کلیک آن را اجرا کنید یا برای اجرای دوره ای برنامه ریزی کنید.

با PowerShell چه کاری می توانید انجام دهید؟

نکته سطح بالای PowerShell این است که می تواند وظایف را خودکار کند، بنابراین نیازی نیست وقت خود را با انجام مکرر کارهای روزمره تلف کنید. برای یک مدیر سیستم(Systems Administrator) حرفه ای ، این می تواند چیزی شبیه ایجاد کاربران جدید، ایجاد رمز عبور برای آنها و ارسال یک ایمیل با جزئیات به سرپرست جدید آنها باشد.

این فرآیند به صورت دستی، با کلیک و تایپ انجام می شود، می تواند از 5 دقیقه تا یک ساعت یا بیشتر طول بکشد. با اسکریپت های مناسب، مدیر سیستم(Systems Administrator) حتی ممکن است مجبور نباشد هیچ بخشی از آن را انجام دهد.

اما می خواهید بدانید که با PowerShell در خانه چه کاری می توانید انجام دهید. تقریباً هر کاری که دوست ندارید دوباره و دوباره انجام دهید. از آن برای آزاد کردن فضای روی هارد دیسک با حذف فایل‌های موقت و لاگ‌هایی که نیاز ندارید استفاده کنید.

منع رفت و آمد را در رایانه کودک خود قرار دهید. دسته ای از فایل ها را تغییر نام(Rename) یا سازماندهی کنید. این زیبایی PowerShell است. تقریباً(Almost) هر کاری که می توانید در رایانه خود انجام دهید، می توانید یک اسکریپت PowerShell ایجاد کنید تا به صورت خودکار و با یک کلیک یا برنامه اجرا شود.

چگونه از PowerShell استفاده کنم؟

ساده ترین راه برای کار با PowerShell در PowerShell Integrated Scripting Environment (ISE) است. می توانید آن را با کلیک بر روی Start و تایپ powershell ise در نوار جستجو در ویندوز 10(Windows 10) پیدا کنید. شما باید آن را مطابق شکل زیر ببینید.

برای اولین بار که از آن استفاده می کنیم، آن را به عنوان Administrator اجرا می کنیم . برای انجام این کار، ابتدا باید حقوق مدیر را بر روی رایانه خود داشته باشید. در منوی استارت ، روی (Start Menu)PowerShell ISE کلیک راست کرده، سپس روی Run as Administrator کلیک کنید .

ممکن است یک پاپ آپ اخطار کنترل دسترسی کاربر(User Access Control) ( UAC ) دریافت کنید که از شما می پرسد آیا مطمئن هستید که می خواهید این کار را انجام دهید. روی Yes کلیک کنید .

اکنون به PowerShell IDE نگاه می کنید . صفحه بالای پنجره (1) صفحه اسکریپت است. اینجا جایی است که شما اسکریپت خود را می نویسید. قسمت پایین پنجره (2) ناحیه کنسول است. هنگامی که اسکریپت خود را آزمایش می کنید، خروجی را در این پنجره خواهید دید.

همچنین در اینجا پیام‌های خطا و مواردی از این دست را خواهید دید که به شما کمک می‌کند اسکریپت‌های خود را اصلاح کرده و بهتر کنید. پنجره سمت راست پنجره (3) افزونه فرمان است. آن را به عنوان یک فرهنگ لغت از تمام دستورات PowerShell در دسترس شما در نظر بگیرید.(PowerShell)

PowerShell تنظیم شده است که هیچ اسکریپتی غیر از آنهایی که قبلاً بخشی از ویندوز(Windows) هستند اجرا نکند . شما باید آن را تغییر دهید تا بتوانید اسکریپت های خود را اجرا کنید.

در پنجره اسکریپت، موارد زیر را کپی و پیست کنید:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

بخش Set-ExecutionPolicy آن را cmdlet (تلفظ فرمان) می نامند. Cmdlet ها چیزهای قدرتمندی هستند. آنها را به‌عنوان دستورات کوتاهی در نظر(Think) بگیرید که می‌توانید به ویندوز(Windows) بدهید ، و ویندوز(Windows) برای ارضای فرمان شما کارهای پیچیده‌تری انجام می‌دهد.

یک قیاس این است که به فرزندتان بگویید اتاقش را تمیز کند. کوتاه(Short) و دقیق. اگر کودک شما در نظافت اتاق مهارت کافی دارد، پس می‌رود و رختخوابش را مرتب می‌کند، لباس‌هایش را در سبد می‌گذارد، اسباب‌بازی‌ها و کتاب‌هایش را قفسه می‌گذارد و شاید حتی زمین را جاروبرقی بکشد. آن‌ها می‌دانند که cmdlet Clean-YourRoom همه این معنی را داشت.

در بالای پنجره، یک پیکان سبز رنگ خواهید دید. روی آن کلیک کنید(Click) تا دستور اجرا شود.

بخش -ExecutionPolicy به Set-ExecutionPolicy می گوید که چه خط مشی را تنظیم کند. این یک پارامتر است. می‌گوید: «من از شما می‌خواهم که طبق این دستورالعمل‌ها کار کنید و به‌طور خاص این کار را انجام دهید. به آن می گوید که از سیاست خاص RemoteSigned استفاده کند.

خط‌مشی RemoteSigned بیان می‌کند که PowerShell نمی‌تواند هر اسکریپتی را که از اینترنت(Internet) دانلود شده است اجرا یا اجرا کند، مگر اینکه توسط یک ناشر مورد اعتماد امضا شده باشد.

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

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

از PowerShell(Use PowerShell) برای ایجاد فضای(Create Space) روی هارد دیسک خود استفاده کنید(Your Hard Drive)

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

$TempFileLocation = "C:\Users\username\Appdata\Local\Temp\*"

هر چیزی که علامت دلار در جلوی آن باشد یک نام متغیر است. آن را مانند یک کیف پول برای قرار دادن چیزهای با ارزش در نظر بگیرید. کیف پول(Wallet) ما را به یاد علامت دلار می اندازد، اشیای قیمتی مانند متغیر به نظر می رسد، بنابراین ما نیز این را به خاطر خواهیم داشت. ما در حال ایجاد یک کیف پول یا متغیری به نام $TempFileLocation . علامت مساوی به PowerShell می گوید که چه چیزی را در آن متغیر قرار دهد.

در این مورد، ما در حال قرار دادن مکان یک مکان فایل‌های موقت در ویندوز هستیم C:\Users\username\AppData\Local\Temp\* . ما این کار را به دو دلیل انجام می دهیم. این مکانی است که همیشه برای حذف فایل‌ها امن است، و ما از آن برای اطلاع دادن به PowerShell برای حذف فایل‌ها استفاده خواهیم کرد.

جایی که در آن مکان نام کاربری نوشته شده است، آن را با نام کاربری خود عوض کنید. این همان نام کاربری است که برای ورود به رایانه خود استفاده می کنید. ستاره (*) در انتهای آن یک کارت وحشی است. چیزی که نشان می دهد همه چیز در پوشه Temp است، زیرا همه چیز در پوشه Temp موقت است و ما می خواهیم آن را حذف کنیم.

دو نقل قول در اطراف مکان نیز مهم است. این به PowerShell می گوید که آنچه در آن وجود دارد یک رشته است. رشته را به عنوان رشته ای از حروف و کاراکترها در نظر بگیرید . (Think)اگر اعداد معمولی بودند، از نقل قول استفاده نمی کردیم.

$TempFile = Get-ChildItem $TempFileLocation -Recurse

ما در حال ساخت متغیر دیگری هستیم. این بار از دستوری برای قرار دادن چیزی در متغیر $TempFile استفاده می کنیم.

Get-ChildItem 

نکته دیگری که در مورد cmdlet هایی مانند Get-( Get-ChildItem) ChildItem متوجه خواهید شد این است که کاملاً خوانا است. ببینید اولین کلمه چگونه فعل است؟ Cmdlet(Cmdlets) ها همه با کلمات اکشن شروع می شوند، بنابراین شما فوراً می دانید که چه کاری انجام می دهد. ChildItem دو اسم است.

بخش دوم cmdlet همیشه به ما می‌گوید که PowerShell این اکشن را برای چه چیزی اعمال می‌کند. ChildItem به معنای همه فرزندان یک مکان والدین است. این مانند این است که بگوییم تمام فایل‌هایی که در یک پوشه هستند را دریافت کنید، به‌طوری‌که فایل‌ها فرزندان و پوشه پدر هستند.

cmdlet اقلام فرزند را از چه چیزی دریافت می کند؟ همه چیز در متغیر $TempFileLocation . PowerShell قرار است به مکانی که قبلاً در $ TempFileLocation قرار داده بودیم برود و همه موارد فرزند را که در آنجا هستند دریافت کند. سپس، آنها را در متغیر $TempFile قرار می دهد .

بنابراین، قسمت -Recurse چیست؟ این به Get-ChildItem می گوید که همه چیز را در آن مکان بررسی کند. فقط نروید فایل ها را بلافاصله داخل پوشه والد دریافت کنید. اگر پوشه‌هایی در آن پوشه وجود دارد، همه فرزندان آنها و فرزندانشان و غیره را دریافت کنید. ما همه آنها را بدست می آوریم.

$TempFileCount = ($TempFile).count

بله، ما در حال ایجاد یک متغیر سوم به نام $TempFileCount و یک عدد را در آن متغیر قرار می دهیم. شماره کجاست؟ خب، ( $TempFile).count این عدد را به ما می‌دهد. احتمالاً متوجه شده اید که قسمت .count قرار است شمارش تمام فایل هایی را که به تازگی در TempFile $ ذخیره کرده ایم انجام دهد .

چرا این کار را کردیم؟ بیشتر به این دلیل که خوب است بدانیم چند فایل بی فایده را با بقیه اسکریپت پاک می کنیم تا بتوانیم بگوییم چقدر موثر بوده است.

if($TempFileCount -eq 0)

اکنون ما در حال تنظیم یک بیانیه شرطی هستیم. می‌توانید ببینید که «اگر» می‌پرسد. اگر چه؟ اگر مطلب داخل پرانتز درست یا نادرست باشد. براکت ها مهم هستند، در غیر این صورت If نمی داند چه چیزی را باید مقایسه کند. در اینجا، سؤال می شود که آیا عددی که در $TempFileCount ذخیره کرده ایم برابر با صفر است یا خیر.

-eq مخفف(-eq) برابر است . این یک نوع عملگر مقایسه است. مثل این است که به بچه‌هایتان بگویید: «اگر اتاق شما تمیز و عالی است، ما کاری انجام می‌دهیم» این عبارت می‌گوید اگر عددی که در $ TempFileCount ذخیره شده است برابر با صفر باشد. مورد بعدی

{Write-Host "There are no files in the folder $TempFileLocation" -ForegroundColor Green}

این چیزی است که اگر $TempFileCount صفر باشد، اتفاق می افتد. براکت های فرفری مهم هستند. آنها به PowerShell می گویند که اگر $ TempFileCount برابر با صفر باشد، فقط کاری را که در داخل آنها است انجام دهد.

روی هاست یا صفحه می‌نویسد: «هیچ فایلی در پوشه C:\Users\username\Appdata\Local\Temp\* وجود ندارد.» پارامتر در انتها، " ForegroundColor " به (ForegroundColor )PowerShell می گوید که متن را سبز کند. این فقط تشخیص را از یک پیام خطایی که معمولا قرمز است آسان تر می کند.

Else

میدونی دیگه یعنی چی این بخش «بهتر است اتاق شما تمیز باشد یا در غیر این صورت» بخشی از بررسی اینکه آیا فرزندتان اتاقش را تمیز کرده است یا خیر. اگر $TempFileCount صفر نباشد چه اتفاقی می افتد.

{$TempFile | Remove-Item -WhatIf -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue}

این می گوید به مکان فعلی ذخیره شده در $TempFile . خط عمودی بعد از آن لوله نامیده می شود. به نوعی مانند یک لوله واقعی عمل می کند زیرا به PowerShell می گوید که محتویات TempFile $ را به داخل cmdlet قیف کند، گویی که آب در حال انتقال به ماشین لباسشویی است. سپس cmdlet Remove-Item کاری را که می گوید انجام می دهد. هر چیزی را که در آن مکان است حذف می کند.

پارامتر -WhatIf در این مرحله بسیار مهم است. به PowerShell(PowerShell) می‌گوید دستور را اجرا کند، اما فقط آن را امتحان کنید، چیزی را حذف نکنید. فقط(Just) به ما نشان دهید اگر واقعاً این کار را می کردیم چه اتفاقی می افتاد.

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

پارامتر -Confirm:$false مانع از این می شود که اسکریپت بپرسد آیا واقعاً می خواهید فایل را حذف کنید. شما می دانید که Recurse چه کاری انجام می دهد. -زور( -Force) یعنی حذف آن چیز مهم نیست. -WarningAction روی (-WarningAction )SilentlyContinue تنظیم شده است .

این کار از دادن هشدارهای اسکریپت به شما در مورد مواردی که در حال حذف آن هستید جلوگیری می کند. -ErrorAction روی (-ErrorAction)SilentlyContinue تنظیم شده است، به طوری که اگر هر نوع خطایی در این فرآیند وجود داشت، همچنان ادامه دارد.

اکنون ما در آخرین خط هستیم.

Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green}

درست مانند Write-Host که اولین بار انجام داد، جمله زیر را خروجی می کند، بنابراین ما می دانیم چه اتفاقی افتاده است. به ما می گوید که چند فایل از پوشه ای که به تازگی پردازش شده حذف شده است و این کار را به رنگ سبز انجام می دهد تا به راحتی قابل تشخیص باشد.

بیایید به طور کلی به فیلمنامه نگاه کنیم:

$TempFileLocation = "C:\Users\guymcd\Appdata\Local\Temp\*"
$TempFile = Get-ChildItem $TempFileLocation -Recurse
$TempFileCount = ($TempFile).count

if($TempFileCount -eq "0") {
Write-Host "There are no files in the folder $TempFileLocation" - ForegroundColor Green
}
Else {
$TempFile | Remove-Item -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green
}

می توانید آن را در PowerShell ISE(PowerShell ISE) خود کپی کرده و جایگذاری کنید و آن را به عنوان چیزی مانند delete-TemporaryFiles.ps1 ذخیره کنید . اکنون که آنها را درک کرده اید، می توانید به قرارداد نامگذاری cmdlet ها پایبند باشید.

اگر کد به دلایلی برای شما کار نمی کند، می توانید اسکریپت PowerShell که ما ایجاد کرده ایم را نیز دانلود کرده و فقط آن را اجرا کنید. کافی(Just) است ابتدا آن را از حالت فشرده خارج کنید تا فایل اسکریپت را مشاهده کنید.

هر زمان که می خواهید این اسکریپت را اجرا کنید، فقط روی آن کلیک راست کرده و Run with PowerShell را انتخاب کنید . یک کنسول PowerShell برای یک یا دو ثانیه ظاهر می شود، در حالی که اسکریپت شما کار خود را انجام می دهد، و اگر خطایی وجود نداشته باشد ناپدید می شود.

از کجا می توانم پاورشل بیشتر بیاموزم؟

خیلی به نظر می رسد! برای اولین اسکریپت PowerShell شما کمی منصفانه است. اگر تا اینجا پیش رفته اید، خودتان را تشویق کنید. شما امروز چیزهای زیادی یاد گرفته اید، اما اکنون می خواهید بیشتر بیاموزید. این عالی است!

منابع زیادی در اینترنت(Internet) برای یادگیری بیشتر در مورد PowerShell وجود دارد. یک مکان خوب برای شروع مقاله ما است، " ایجاد لیستی از برنامه های راه اندازی از طریق خط فرمان یا PowerShell"(Generate a List of Startup Programs via Command Line or PowerShell) . سپس این منابع دیگر را بررسی کنید:



About the author

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



Related posts