قسمت سوم : کلیدهای میانبر، cmdlet History و پیدا کردن و گزارش گیری در PowerShell

0 59

بازهم  سلام میکنم به تمام کسانی که  سری مقالات پاورشل را تا به الان همراه ما بودند. از این مقاله وارد مباحث جدی پاورشل می شویم و ما در این مقاله قصد داریم درمورد Shortcut Keys, Command History و نحوه پیدا کردن دستورات و گزارش گیری در پاورشل صحبت کنیم.

 

Shortcut Keys

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

Up/Down Arrow : نمایش کامند های قبلا استفاده شده.

Right/Left Arrow : تغییر مکان Cursor برای ایجاد تغییرات در کامند

Tab : برای Auto Completion

Shift+Tab : برای Auto Completion بصورت Reverse و یا همان  برعکس

 

درواقع اینها ساده ترین و متداول ترین Shortcut هایی هستند که ما در اکثر اوقات از آنها استفاده می کنیم. حالا نگاهی به Shortcut های دیگر میندازیم :

F8 :

زمانی که ما به دنبال دستوری هستیم که قبلا استفاده کرده ایم و نمی خواهیم دوباره آن را بنویسیم از این کلید استفاده میکنیم. برای مثال ما میخواهیم به دنبال دستوری که با New-L شروع شده بگردیم ، باید New-L را بنویسیم بعد F8 را بزنیم تا به دستور مورد نظر برسیم. می توانیم درصورتی که به دستور مورد نظر نرسیدیم چندین بار F8 را بزنیم تا دستور مورد نظر خود را پیدا کنیم :

Crtl+r :

همانند F8 به دنبال دستور مورد نظر که قبلا اجرا شده است می گردد به این شکل که شما باید Ctrl+r را بزنید سپس دستور را بنویسید و تا زمانی که به کامند مورد نظر نرسیدید می توانید Ctrl+r را بزنید تا نتایج دیگر را نشان دهد. اما تفاوت این دستور این است که از قدیمی ترین دستور شروع به سرچ می کند یعنی بصورت Reverse سرچ می کند. مانند :

Ctrl+Space :

وقتی شما قسمتی از یک cmdlet را می نویسید و سپس ctrl+space را می زنید، لیست کامند هایی که مربوط به چیزی که شما تایپ کردید را نشان می دهد و همچنین Syntax آن cmdlet را نشان می دهد. مانند :

 

Command History چیست؟

در این قسمت ما در مورد Command History توضیح خواهیم داد که چطور می توانیم با استفاده از این قابلیت از اتلاف وقت جلوگیری کنیم.

تمامیه دستوراتی که درمورد سرچ بین کامند های استفاده شده در بالاتر گفته شد توسط ماژولی به اسم PSReadLine برای ما فراهم می شود که به ما توانایی کار با دستورات زیر را می دهد :

Get-History : دستوراتی که در همین Session اجرا شده را نشان می دهد. که مانند عکس زیر به شما دستوراتی که در این Session استفاده شده است را نشان می دهد :

Get-History

Ctrl+r : در قسمت بالا توضیح داده شد.

Ctrl+Space : در قسمت بالا توضیح داده شد.

Tab Completion : که با همین ماژول قابل استفاده است و فوق العاده می تواند به ما در هنگام نوشتن کمک کند و برای ما زمان را ذخیره کند.

 

تغییر سبک Tab Completion :

Set-PSReadLineOption -EditMode Emacs

که ۳ حالت Windows, Emacs, vi دارد و بصورت دیفالت بر روی Windows است اما اگر آن را به Emacs تغییر بدهیم، هنگام استفاده از Tab بصورت زیر لیست نشان می دهد مانند command line سیسکو :

 

پیدا کردن دستورات در پاورشل

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

 

استفاده از دستور Get-Command

خب دوستان همانطور که قبلاً در این مقالات به این موضوع اشاره شد فرم کلی دستورات در پاورشل بصورت verb-noun هست که این موضوع کمک می کند تا شما به راحتی بتوانید دستورات مورد نظر خود را پیدا کنید، به این دلیل که اسم cmdlet ها به کاری که انجام می دهند شباهت دارد و تنها چیزی که شما به آن نیاز دارید دستور Get-Command است تا شما بتوانید کامند مورد نظر خود را پیدا کنید.

 

برای مثال فکر کنید می خواهید دستور مورد نظر برای فایل Share را پیدا کنید :

استفاده از Wildcard :

علامت  *  به نشانه Wildcard است، اگر پشت کلمه استفاده شود به این معناست که کلمات یا حروفی قبل از Share وجود دارند (share*). اگر جلوی کلمه باشد یعنی می تواند کلمه یا حروفی بعد از آن وجود داشته باشد (*Share). حال اگر در دو سمت کلمه از علامت  *  استفاده شود یعنی چیزی که شما به دنبال آن هستید کلمه Share را در خود دارد و شاید قبل یا بعد از آن کلمات یا حروف دیگری نیز باشد (*Share*).

مثال زیر که می توانید از پارامترهای مختلف کمک بگیرید و دستور مورد نظر خود را پیدا کنید :

نکته :  “ برای راحتی کار می توانیم از Alias این دستور استفاده بکنیم gcm ” :

توضیحی درباره Alias ها :

دوستان ما در همۀ CLI (Command Line Interface) ها مفهومی به اسم Alias داریم که این Alias ها درواقع مخفف شده دستورات و یا همان cmdlet ها هستند که ما برای راحتی کار می توانیم از آن ها استفاده کنیم. البته ما در Scripting پیشنهاد می کنیم که شما در اسکریپت های خود از نوشتن Alias ها خودداری کنید، چون احتما اینکه اسکریپت شما کمی گیج کننده و نامفهوم شود وجود دارد پس به همین علت ما در اسکریپت نویسی باید از اسم cmdlet ها و پارمتر ها بصورت کامل استفاده کنیم تا اسکریپت خیلی قابل فهم تر باشد.

اما چگونه می توانیم لیست این Alias ها را در پاورشل ببینیم؟ ما با استفاده از دستور زیر می توانیم تمام cmdlet هایی که معادل Alias دارند را مشاهده کنیم :

Get-Alias

حالا شاید برای شما سوال پیش بیاد که ما می توانیم ببینیم آیا یک cmdlet مخفف یا همان Alias دارد یا خیر؟ بله می توانیم با همین دستور با استفاده از پارامتر Definition این کار را انجام دهیم :

Get-Alias -Definition Get-Command

یا شاید برای شما پیش بیاد که در یک اسکریپت که از اینترنت دانلود کرده اید از Alias استفاده شده باشد که شما آن را نمی شناسید. پس با استفاده از دستور زیر می توانید ببینید Alias مورد نظر شما برای چه cmdlet هست :

Get-Alias -Name gwmi

 

ساخت Alias :

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

اما شما برای اینکه بتوانید Alias های شخصی خود را بسازید می توانید با توجه به نمونه زیر این کار را انجام دهید :

New-Alias -Name “nlu” -Value New-LocalUser

 

Edit کردن Alias :

ما همچنین می توانیم Alias هایی که در حال حاضر در این Session از پاورشل وجود دارند را Edit کنیم و اسم آن ها را تغییر دهیم. برای مثال ما با استفاده از دستور زیر، Help که مخفف Get-Help است را به Komak تغییر میدهیم :

Set-Alias -Name Komak -Value Get-Help

حالا شما می توانید Session پاورشل خود را ببندید و دوباره باز کنید و ببینید آیا این دستور همچنان وجود دارد یا خیر.

 

Import و Export کردن Alias ها : 

یکی از راه حل هایی که می توانید از آن استفاده کنید تا Alias های شما Session های دیگر و یا حتی Computer های دیگر نیز موجود شوند استفاده از Export و Imoprt است ولی باید توجه داشته باشید که در این روش نیز، وقتی شما لیست Alias ها را Import می کنید فقط مورد استفاده در همان Session است و اگر پاورشل را ببندید و دوباره باز کنید آن Alias هایی که Import شده بودند از بین می روند.

برای Export خیلی ساده می توانید دستور را استفاده کنید :

Export-Alias -Path C:\Alias.csv

دوستان دقت کنید که پسوند فایل باید csv. باشد.

و حالا برای Import کردن آن از دستور زیر استفاده می کنید و حتما از پارمتر Force استفاده کنید و اگر استفاده نکنید Error خواهید گرفت :

Import-Alias -Path C:\Alias.csv -Force

 

آپدیت کردن فایل های Help :

قبل از آموزش استفاده از Get-Help در پاورشل شما باید حتما فایل های مربوط به Help دستورات پاورشل را آپدیت کنید که با دستور زیر می توانید این کار را انجام دهید و حتما باید دسترسی به اینترنت داشته باشید، همچنین باید Run as Administrator پاورشل را باز کنید :

Update-Help -Verbose -Force -ErrorAction SilentlyContinue

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

 

استفاده از Get-Help :

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

Alias این دستور نیز Help می باشد که می توانیم از آن استفاده کنیم.

اما کار اصلی این کامند، گرفتن Help درمورد جزئیات کامند است که شامل Syntax، توضیحات درمورد پارامتر ها و مثال ها است که به راحتی با استفاده از آن ها می توانیم دستور مورد نظر را استفاده کنیم.

نحوه خواندن Syntax :

به مثال زیر دقت کنید :

همانطور که مشاهده می کنید هر کامند می تواند یک یا چند Syntax داشته باشد که ما فقط می توانیم در یک خط کامند یکی از Syntax ها را استفاده کنیم. یعنی از دو Syntax بالا، در یک خط فقط می توانیم از یکی استفاده کنیم.

 

اما بریم سراغ خواندن و تحلیل Syntax در پاورشل  :

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

مانند : یعنی پارامتر ComputerName نیازی نیست و Value آن نیز نیازی نیست در دستور بصورت اجباری استفاده شوند.

منظور از Value همان System.String یا مقداری که جلوی پارامتر نوشته می شود است.

[<[]ComputerName <System.String-]

برای مثال ما می توانیم از دستور زیر بدون استفاده کردن پارامتر ComputerName خروجی بگیریم :

البته استفاده از پارمتر Newest نیز اجباری نیست.

 

 Mandatory Parameter و  : هر پارامتر یا Value یک پارامتر که خارج از براکت قرار بگیرد به معنای این است که آن پارامتر برای اجرای دستور نیاز به مشخص کردن آن پارامتر یا Value آن دارد.

مانند : قسمت System.String این پارامتر باید مقدار داشته باشد تا کامند اجرا شود اما نیازی به نوشتن اسم این پارامتر نیست فقط می توانیم مقدار آن را مشخص کنیم.به این ها Positional Parameter گفته میشه که پایین تر توضیح آن داده شده است.

<LogName] <System.String-]

طبق توضیحات بالا ما نمی توانیم بدون نوشتن Value آن پارامتر به نتیجه برسیم. مانند مثال زیر که اسم پارمترِ LogName استفاده نشده است ولی Value آن باید نوشته میشد :

 

Positional Parameter : وقتی اسم یک پارامتر درون براکت قرار بگیرد به این معنی است که این پارامتر Positional است. یعنی نوشتن اسم آن در کامند نیازی نیست.

مانند : در اینجا اسم پارامتر اختیاری است ولی قسمت Value آن اجباری است.

<LogName] <System.String-]

نکته : اگر در یک Syntax چند تا Positional Parameter داشته باشیم باید ترتیب آن ها را وقتی که اسمشان را نمی نویسیم رعایت کنیم. برای مثال اولین پارامتر که در Systax بصورت Positional هست را ابتدا Value آن را مشخص می کنیم بعد Value پارامتر دوم که Positional هست را مشخص می کنیم. به مثال زیر دقت کنید :

Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine

اما دستور بالا را می توانیم بصورت زیر بنویسیم، چون هر دو  پارامتر Positional می باشند : (حتما باید ترتیب رعایت شود)

Set-ExecutionPolicy Restricted LocalMachine

درمورد Execution Policy نیز، در مقاله بعدی توضیح داده می شود.

 

Accept Multiple Value : اگر در انتها Value هر پارامتر علامت [] نوشته شده بود به این معناست که این Value می توند چندین مقدار را بگیرد.

مانند : []system.string به این معناست که چندین اسم کامپیوتر را می تواند بگیرد.

[<[]ComputerName <System.String-]

همانند مثال زیر که هر مقدار با کاما از یکدیگر جدا می شوند :

‘Test-Connection -ComputerName ‘PC1′,’DC2’,’SRV1

Common Parameter : پارامتر هایی که در اکثر دستورات پاورشل وجود دارند مانند :

.., ErrorAction, Verbose, Debug, Continue, WhatIf

اما چه پارامتر هایی در کامند Help به ما کمک می کنند؟

برای گرفتن مثال هایی برای کامند مورد نظر :

 

برای کامل ترین و با جزئیات ترین توضیحات درمورد کامند می شود از پارامتر Full استفاده کرد :

 

برای نشان دادن Help در یک صفحه جدا که بازهم بصورت Full هست :

 

مشاهده داکیومنت های مایکروسافت با استفاده از پارمتر -Online که می تواند بسیار کاربردی باشد :

 

استفاده از فایل های about_*  با استفاده از Help :

تمامیه فایل های Help که با about_ شروع می شوند در باره یک موضوع خاص یا یک Concept توضیحات می دهند، که توضیحات بسیار کامل و کاربردی هستند.

مانند توضیحات درباره Array  یا آرایه :

البته شما با استفاده از Wildcard که در همین مقاله درباره آن توضیح داده شد می توانید تمام فایل های Help که با about_ شروع می شود را ببینید :

 

استفاده از Find-Command :

اگر با استفاده از دستورات بالا موفق به پیدا کردن کامند مورد نظر خود نشدید، می توانید از از طریق اتصال به اینترنت و با استفاده از Repository که همان PowerShell Gallery است سعی برای پیدا کردن دستور مورد نظر در اینترنت کنید. مانند مثال زیر :

نکته مهم :  اگر برای اولین بار است از سری دستورات Find استفاده می کنید باید پکیج NuGet Provider را نصب کنید. البته خود پاورشل می تواند آن را نصب کند، اگر پیغام زیر برای شما به نمایش در آمد کلمه “y” را بزنید تا بصورت خودکار پاورشل NuGet Provider را برای شما نصب کند و همچنین باید Run as Administrator پاورشل را باز کنید :

 

استفاده از Find-Module :

همانند Find-Command است ولی همانطور که از اسمش پیداست برای پیدا کردن ماژول ها استفاده می شود. مثل :

حالا اگر با استفاده از دستور بالا ماژول مورد نظر را پیدا کردید می توانید بصورت زیر آن را نصب کنید :

Find-Module -Name Hyper-VAdministration | Install-Module

 

استفاده از Show-Command :

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

 

لاگ برداری از PowerShell

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

 

روش اول : Module Logging

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

به مثال زیر برای نحوه انجام Module Logging دقت کنید :

نکته : حتما دقت داشته باشید، که برای اجرای دستور دوم در عکس زیر حتما باید ماژول مورد نظر Import شده باشد و اگر غیر از این باشد ارور می دهد.

حالا اگر بخواهیم لاگ های مربوط به پاورشل را ببینیم باید به مسیر زیر در Event Viewer برویم :

Application and Services \ Microsoft \ Windows \ PowerShell \ Operational

به عکس زیر دقت کنید : لاگ برداری مربوط به ماژول SmbShare

 

روش دوم : استفاده از Transcript

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

در حالت اول اگر شما بدون مشخص کردن پارامتری دستور Start-Transcript را اجر کنید، خود پاورشل یک فایل .txt با یک اسم رندوم در مسیر زیر اجرا می کند :

USERPROFILE%\Documents\PowerShell_transcript.WIN10-1.VhIFjTo+.20210815002656.txt%

اما به خروجی فایل .txt توجه کنید :

 

حالا ما می توانیم بصورت زیر نیز Start-Transcript را اجرا کنیم :

در قسمت پایین پارامتر های مهم این دستور توضیح داده شده است، البته این پارمتر ها در بیشتر کامند هایی که مربوط به فایل و فولدر می شود وجود دارد :

OutputDirectory :

برای این است که مشخص کنیم این فایلی که با اسم رندوم ساخته می شود در کدام فولدر قرار بگیرد.

IncludeInvocationHeader :

هر کامندی که ما اجرا می کنیم را، به همراه تایمی که اجرا شده ذخیره می کند. مانند فایل زیر :

Append :

اگر از این پارامتر استفاده کنیم، اگر فایلی که در قسمت Path نوشته ایم در آن اطلاعاتی باشد آن ها را پاک نمی کند و این اطلاعات فقط به انتهای آنها اضافه می کند. چون بصورت دیفالت Replace می کند.

NoClobber :

اگر اطلاعاتی در فایل مقصد باشد آنها را پاک نمی کند تا اطلاعات جدید را در آن قرار دهد.

LiteralPath :

تفاوتش با Path در این است که این آدرس باید دقیقا به فایل مقصد اشاره کند و شامل WildCard نباشد.

Force :

اگر بر روی فایل مقصد Read Only Attribute فعال بود، میتوانیم از این دستور استفاده کنیم تا دیتای مورد نظر ما بدون در نظر گرفتن Read Only Attribute بر روی آن فایل قرار بگیرد.

نکته : اگر بخواهیم Transcript را با نام دلخواه خود درست کنیم، باید از پارامتر Path استفاده کنیم. مانند :

Start-Transcript -Path “c:\Arshia-Log.txt”

 

روش سوم : استفاده از Group Policy

همانطور که در عکس زیر مشاهده می کنید، اگر به مسیر زیر در Group Policy بروید می توانید پالیسی های زیر را به کامپیوتر و یا یوزر اعمال کنید : برای اعمال کمی زمان بر است.

Computer Configuration \ Administrative Templates \ Windows Component \ Windows PowerShell

User Configuration \ Administrative Templates \ Windows Component \ Windows PowerShell

نکته : این پالیسی ها، هم در قسمت User Configuration و هم در قسمت Computer Configuration قابل اعمال است. همچنین اگر هم برای Computer و هم برای User این پالیسی سِت شده باشد و باعث Conflict شود، پالیسی که برای User سِت شده است اعمال خواهد شد.

در پالیسی Turn on Module Logging شما باید آن را Enable کنید و اسم ماژول هایی که تمایل به گزارش گیری دارید را بنویسید.

اگر پالیسی دوم یعنی Script Block Logging را Enable کنید، گزارش مربوط به اجرا شدن اسکریپت ها را نیز در Event Viewer ذخیره می کند.

پالیسی PowerShell Transcription هم برای ذخیره کردن همان فایل .txt است که با کامند Start-Transcript ساخته می شد و شامل تمام کامند ها و خروجی هایی بود که کاربر در پاورشل انجام داده بود.

 

جمع بندی :

در ابتدا درمورد Shortcut Keys و cmdlet History توضیحات کامل داده شد. بعد از آن یاد گرفتیم چطور با دستورات Get-Command، Get-Help، Find-Command، Find-Module کار کنیم تا بتوانیم دستوراتی که به دنبال آن ها هستیم را پیدا کنیم. در این بین همچنین توضیحات کامل راجع به Alias ها دادیم که چطور Alias ها را ببینیم، بسازیم، تغییر دهیم و همچنین آن ها را Export گرفته و سپس  Import کنیم. در آخر نیز درمورد یکی از مهمترین مباحث، یعنی لاگ برداری از پاورشل صحبت کردیم و سه روش برای این کار را ارائه و نحوه انجام آن نیز بصورت کامل گفته شد.

 

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

منتظر مقالات بعدی باشید :)) …

 

منابع :

– Administration and Automation with Windows PowerShell از UDEMY

– PowerShell Basics Course از ITProTV

– about_Group_Policy_Settings در docs.microsodt.com

 

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.