امیرحسین کریم پور
مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

10 دستور مهم پاورشل که یک مدیر شبکه باید بداند

در این مقاله در خدمت شما هستیم با 10 تا از دستورات بسیار مهم و کاربردی PowerShell که بدون شک همه مدیران شبکه مایکروسافتی باید آنها را خوب بدانند. تقریبا مدت زمان زیادی است که شرکت مایکروسافت به مدیران شبکه توصیه کرده که از PowerShell به جای Command Prompt یا همان CMD استفاده کنند. نکته اینکه اکثر دستورات CMD در PowerShell نیز کار می کنند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

درست است که دستورات cmdlet های PowerShell بسیار بسیار زیاد است اما شما لازم نیست همه دستورات را از حفظ باشید بلکه مایکروسافت کار کردن با PowerShell را تا حدودی آسان کرده و با کمک گرفتن از Help خود PowerShell و با کمی جستجو و حضور ذهن براحتی می توانید دستورات مورد نظر خودتان را اجرا کرده و سرور های خودتان را در شبکه مدیریت کنید. ساختار دستورات PowerShell بصورت Verb-Noun یا فعل-اسم است و همین موجب شده تا بخاطر سپردن دستورات تا حد زیادی آسان تر شود. در این مقاله به معرفی 10 مورد از دستورات پرکاربرد PowerShell میپردازیم. قبل از اینکه به سراغ معرفی دستورات برویم این را بهتر است متذکر شویم که هر گاه گفتیم دستور منظورمان همان cmdlet هست.

1- اگر بخواهید توسط PowerShell بین پوشه ها یا دایرکتوری ها جابجا شوید در CMD از دستور cd استفاده می کردید گرچه در PowerShell نیز می توان از cd استفاده کرد اما جایگزین دستور cd در PowerShell نیز cmdlet یا دستور Set-Location است و نحوه استفاده از این دستور به شکل زیر است :

Set-Location ""

همانطور که در دستور فوق مشاهده می کنید Set در اینجا همان Verb یا فعل و Location همان Noun یا اسم است که معنی آن ست کردن Location است جلوی دستور نیز اسم Path را می آوریم تا Location ما در دایرکتوری فعلی تغییر کند. برای مثال :

Set-Location "C:\Users"

این دستور ما را به دایرکتوری Users تغییر مکان می دهد.

2- همانطور که میدانید لیست کردن تمام محتویات دایرکتوری با دستور dir در Command Prompt انجام می شود شما در PowerShell با دستور Get-Children کلیه فایل ها و پوشه های درون دایرکتوری فعلی را لیست می کند.

3- Rename کردن فایل که اکثر ما ترجیح می دهیم از رابط گرافیکی یا GUI برای این کار استفاده کنیم. در Command Prompt از دستور rename برای این کار استفاده می شود. شما فرض کنید می خواهید یک فایل یا فولدر را که روی یک سرور ریموت قرار دارد را تغییر نام دهید برای اینکه بتوانید سریع تر این کار را انجام دهید PowerShell قطعا به کمکتان می آید. برای تغییر دادن نام فایل توسط PowerShell از قالب دستوری زیر باید استفاده کنید :

Rename-Item "Path/of/the/file.txt" - NewName "NewNameOfTheFile.csv"

با دو مثال این دستور را براحتی می توان یاد گرفت :

Rename-Item -Path "c:\logfiles\old.txt" -NewName "new.txt"

این دستور فایل old.txt را به new.txt تغییر نام می دهد.

rename-item -path c:\docs\dump.csv -newname Report.xls

این دستور فایل dump.csv را به Report.xls تغییر نام می دهد. توجه کنید که پسوند یا extension فایل نیز تغییر می کند.

4- اگر شما دستوری را به خاطر ندارید میتوانید از دستور Get-Help در PowerShell کمک بگیرید. شما در Command Prompt میتوانستید با زدن دستور ؟/ جلوی دستور نحوه استفاده از دستور را یاد بگیرید اما در PowerShell دستور بسیار مناسبتر Get-Help می توان کمک گرفت. قالب دستوری استفاده از Get-Help بصورت زیر است :

Get-Help "CMDLET NAME"

برای مثال با استفاده از دستور زیر هر دستوری که اول آن Rename هست را می توانید پیدا کنید :

get-help *rename*

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

Name                              Category  Module                    Synopsis
----                              --------  ------                    --------
Rename-Computer                   Cmdlet    Microsoft.PowerShell.M... ...
Rename-Item                       Cmdlet    Microsoft.PowerShell.M... ...
Rename-ItemProperty               Cmdlet    Microsoft.PowerShell.M... ...
Rename-DAEntryPointTableItem      Function  DirectAccessClientComp... ...
Rename-LocalUser                  Cmdlet    Microsoft.PowerShell.L... Rename-LocalUser...
Rename-LocalGroup                 Cmdlet    Microsoft.PowerShell.L... Rename-LocalGroup...
Rename-NetAdapter                 Function  NetAdapter                ...
Rename-NetLbfoTeam                Function  NetLbfo                   ...
Rename-NetIPsecMainModeRule       Function  NetSecurity               ...
Rename-NetIPsecPhase1AuthSet      Function  NetSecurity               ...
Rename-NetIPsecQuickModeCryptoSet Function  NetSecurity               ...
Rename-NetFirewallRule            Function  NetSecurity               ...
Rename-NetIPsecRule               Function  NetSecurity               ...
Rename-NetIPsecPhase2AuthSet      Function  NetSecurity               ...
Rename-NetIPsecMainModeCryptoSet  Function  NetSecurity               ...
Rename-NetSwitchTeam              Function  NetSwitchTeam             ...
Rename-NetIPHttpsConfiguration    Function  NetworkTransition         ...
Rename-Printer                    Function  PrintManagement           ...
Rename-MaskingSet                 Function  Storage                   ...

5- در Command Prompt برای بستن یک Process از دستور taskkill استفاده می کردید اما در PowerShell با دستور بسیار معنادار تر از taskkil که Stop-Process نام دارد استفاده می کنیم. قالب دستوری استفاده از این cmdlet بصورت زیر است :

Stop-Process -Name "ApplicationName.exe"

مثال :

Stop-Process -Name "notepad"

با اجرای دستور فوق برنامه NotePad بسته می شود.

6- بسیاری از ما ترجیح میدهیم با استفاده از محیط GUI سیستم را خاموش کنیم. اگر در محیط های Enterprise مشغول به کار هستید و با بسیاری از سرور ها سر و کار دارید محیط گرافیکی گزینه جالبی برای این کار نیست و گاها شما مجبور هستید که با استفاده از دستور در صورت لزوم سرور ها را خاموش کنید. در Command Prompt با استفاده از دستور shutdown -s این کار را انجام میدادید ولی در PowerShell با استفاده از دستور زیر براحتی کامپیوتر مورد نظرمان را خاموش می کنیم :

Stop-Computer -ComputerName "HostName1","HostName2","Gateway or Address"

همانطور که در قالب دستوری بالا مشاهده می کنید شما می توانید بصورت همزمان با استفاده از این CMDLET چندین کامپیوتر را خاموش یا Shutdown کنید.

7- همانند Shutdown یا Stop کردن کامپیوتر شما می توانید سیستم را Restart کنید. در Command Prompt با استفاده از دستور shutdown -r این کار را انجام میدادید. حالا در PowerShell با استفاده از قالب دستوری زیر می توانید این کار را انجام دهید :

Restart-Computer -ComputerName "HostNameNew", Gateway or Address"

8- اگر با استفاده از Group Policy به سیستم ها GPO اعمال کردید ولی GPO به هر دلیلی به سیستم ها اعمال نمی شود شما با استفاده از دستور gpupdate /force میتوانستید سیستم را مجبور کنید تا Policy ها را از سرور دریافت کند. با استفاده از دستور زیر در PowerShell می توانید بدون آنکه به سیستم مربوطه PSSession بزنید روی تعداد زیادی سیستم این کار را انجام دهید :

Invoke-GPUpdate -Computer "Name of the Host" -Force

مثال :

Invoke-GPUpdate -Computer "TOSINSO\COMPUTER-02" -Force

9- برای ست کردن Variable ها در ویندوز شما در Command Prompt از قالب دستوری زیر استفاده می کردید :

SET VariableName = "Value of the Variable"

در PowerShell نیز مشابه همین کار را باید انجام دهید با این تفاوت که به جای SET باید از علامت $ استفاده کنید. به قالب دستوری زیر توجه کنید :

$VariableName="Value of the Variable"

مثال :

$Env:windir

برای تغییر دادن مقدار Variable از قالب دستوری زیر باید استفاده کنید :

$Env: += "

10- برای جوین کردن کلاینت ها به دامین با دستور netdom و با استفاده از قالب دستوری زیر این کار را انجام میدادید :

netdom /domain:domainName /user:userName /password:passwordForTheDomain member hostname /add

در PowerShell خیلی راحت تر با قالب دستوری زیر میتوانید این کار را انجام دهید :

Add-Computer -DomainName "Domain" -Credential "Domain\Username" -Restart

مثال :

Add-Computer -ComputerName PC01 -DomainName tosinso.com -LocalCredentials administrator -DomainCredential tosinso\administrator -restart -force

11- Enter-PSSession : برای اینکه بخواهید یک ویندوز سرور را از طریق PowerShell مدیریت کنید لازم است که ابتدا به آن سرور وصل شوید. برای وصل شدن به سرور از طریق PowerShell ما از دستور Enter-PSSession استفاده می کنیم. با قالب دستوری زیر شما میتوانید به سرور ریموت از طریق PowerShell متصل شوید :

Enter-PSSession -ComputerName RemoteServer -Port 5353 -Credential Domain\Username

به جای RemoteServer باید اسم سرور ریموت را وارد کنید. در قسمت Port نیز شماره پورتی که میخواهید به آن وصل شوید را باید وارد کنید. البته وارد کردن پارامتر پورت اجباری نیست. در قسمت Credentials هم Username و Password یوزری که مجوز PS Session زدن به سرور ریموت را دارد باید وارد کنید. مثال :

Enter-PSSession -ComputerName Server01 -Port 90 -Credential Domain01\User01

12- Invoke-Command : زمانی که بخواهید بدون PS Session زدن به سرور ریموت یک دستور را روی سرور یا گروهی از سرور های ریموت به اجرا دربیاورید میتوانید از دستور Invoke-Command استفاده کنید. قالب دستوری استفاده از این CMDLET بصورت زیر است :

Invoke-Command -ComputerName RemoteServer -Credential Domain\Username -ScriptBlock {PScommand}

مثال :

Invoke-Command -ComputerName server01 -Credential domain01\user01 -ScriptBlock {Get-Culture}

دستور فوق دستور Get-Culture را روی سرور Server01 اجرا می کند. Get-Culture زبان تنظیمات کیبورد و زبان تاریخ و زمان سیستم را نمایش می دهد. خروجی دستور Get-Culture به شکل زیر است :

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

13- Set-Volume و Get-Volume : برای تغییر دادن اسم درایو و همچنین Drive Letter میتوانید از دستور Set-Volume استفاده کنید. مثال :

Set-Volume -FileSystemLabel "Test" -NewFileSystemLabel "TestData"

این دستور درایوی به نام Test را به TestData تغییر نام می دهد. با دستور زیر نیز میتوانید اطلاعات درایو نظیر اسم درایو ، فایل سیستم درایو ، Drive Letter و ... را برای یک درایو مشاهده کنید :

Get-Volume -DriveLetter C

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

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining      Size
----------- ------------ -------------- --------- ------------ ----------------- -------------      ----
C           OS           NTFS           Fixed     Healthy      OK                     72.11 GB 150.28 GB

14- Get-ACL و Set-ACL : برای اینکه بتوانید روی فایلی یا کلید Registry سطوح دسترسی تنظیم کنید دستورات Set-ACL و Get-ACL به کمکتان می آیند. مثال :

Get-Acl -Path “HKLM:\System\CurrentControlSet\Control” | Format-List

مثال ترکیبی از Set-ACL و Get-ACL :

Get-Acl -Path "C:\Dog.txt" | Set-Acl -Path "C:\Cat.txt"

این دستور تمامی ACL ها و یا Permission ها را از فایل Dog.txt به Cat.txt منتقل می کند.

15- Test-Connection : به جای دستور Ping که واقعا دستور ضعیفی برای تست ارتباط بین چند کامپیوتر است از CMDLET بسیار قدرتمند Test-Connection میتوانید استفاده کنید. با مثال های زیر بیشتر با این CMDLET آشنا میشوید.


Test-Connection "Server01"


دستور فوق به سادگی کامپیوتر Server01 را Ping میگیرد.

Test-Connection -ComputerName "Server01", "Server02", "Server12"

دستور فوق کامپیوتر هایی که مشخص کردید را همزمان Ping می کند.

Test-Connection -Source "Server02", "Server12", "localhost" -ComputerName "Server01" -Credential Domain01\Admin01

این دستور از کامپیوتر هایی که در مقابل پارامتر Source مشخص کرده ایم کامپیوتر ریموت یعنی Server01 را Ping خواهد کرد. در مقابل پارامتر Credential هم باید Username و Password سرور ریموت یا Server01 را وارد کنیم زیرا که سرور های Source باید مجوز Ping کردن یک سرور ریموت را داشته باشند.

Test-Connection -ComputerName "Server01" -Count 3 -Delay 2 -TTL 255 -BufferSize 256 -ThrottleLimit 32

با استفاده از دستور فوق نیز میتوانید پارامتر های Count یا تعداد بسته های ICMP ، مدت زمان Delay یا تاخیر در ارسال بسته های ICMP ، پارامتر TTL و ... را مشخص کنید.


امیرحسین کریم پور
امیرحسین کریم پور

مدیر ارشد توسینسو و متخصص سرویس های مایکروسافت

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

نظرات