# PR Summary * Replace an ordered list with sections * Fix an ordered list to continue numbering in each item ## PR Context <!-- Provide a little reasoning as to why this Pull Request helps and why you have opened it. --> ## PR Checklist - [x] [PR has a meaningful title](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - Use the present tense and imperative mood when describing your changes - [x] [Summarized changes](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - [x] [Make sure all `.h`, `.cpp`, `.cs`, `.ps1` and `.psm1` files have the correct copyright header](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - [x] This PR is ready to merge and is not [Work in Progress](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---work-in-progress). - If the PR is work in progress, please add the prefix `WIP:` or `[ WIP ]` to the beginning of the title (the `WIP` bot will keep its status check at `Pending` while the prefix is present) and remove the prefix when the PR is ready. - **[Breaking changes](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#making-breaking-changes)** - [x] None - **OR** - [ ] [Experimental feature(s) needed](https://github.com/MicrosoftDocs/PowerShell-Docs/blob/staging/reference/6/Microsoft.PowerShell.Core/About/about_Experimental_Features.md) - [ ] Experimental feature name(s): <!-- Experimental feature name(s) here --> - **User-facing changes** - [x] Not Applicable - **OR** - [ ] [Documentation needed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#pull-request---submission) - [ ] Issue filed: <!-- Number/link of that issue here --> - **Testing - New and feature** - [x] N/A or can only be tested interactively - **OR** - [ ] [Make sure you've added a new test if existing tests do not effectively test the code changed](https://github.com/PowerShell/PowerShell/blob/master/.github/CONTRIBUTING.md#before-submitting) - **Tooling** - [x] I have considered the user experience from a tooling perspective and don't believe tooling will be impacted. - **OR** - [ ] I have considered the user experience from a tooling perspective and enumerated concerns in the summary. This may include: - Impact on [PowerShell Editor Services](https://github.com/PowerShell/PowerShellEditorServices) which is used in the [PowerShell extension](https://github.com/PowerShell/vscode-powershell) for VSCode (which runs in a different PS Host). - Impact on Completions (both in the console and in editors) - one of PowerShell's most powerful features. - Impact on [PSScriptAnalyzer](https://github.com/PowerShell/PSScriptAnalyzer) (which provides linting & formatting in the editor extensions). - Impact on [EditorSyntax](https://github.com/PowerShell/EditorSyntax) (which provides syntax highlighting with in VSCode, GitHub, and many other editors).
11 KiB
PowerShell Beginner’s Guide
If you are new to PowerShell, this document will walk you through a few examples to give you some basic ideas of PowerShell. We recommend that you open a PowerShell console/session and type along with the instructions in this document to get most out of this exercise.
Launch PowerShell Console/Session
First you need to launch a PowerShell session by following the Installing PowerShell Guide.
Getting Familiar with PowerShell Commands
In this section, you will learn how to
- create a file, delete a file and change file directory
- discover what version of PowerShell you are currently using
- exit a PowerShell session
- get help if you needed
- find syntax of PowerShell cmdlets
- and more
As mentioned above, PowerShell commands are designed to have Verb-Noun structure, for instance Get-Process
, Set-Location
, Clear-Host
, etc.
Let’s exercise some of the basic PowerShell commands, also known as cmdlets.
Please note that we will use the PowerShell prompt sign PS /> as it appears on Linux in the following examples.
It is shown as PS C:\>
on Windows.
-
Get-Process
: Gets the processes that are running on the local computer or a remote computer.By default, you will get data back similar to the following:
PS /> Get-Process Handles NPM(K) PM(K) WS(K) CPU(s) Id ProcessName ------- ------ ----- ----- ------ -- ----------- - - - 1 0.012 12 bash - - - 21 20.220 449 powershell - - - 11 61.630 8620 code - - - 74 403.150 1209 firefox …
Only interested in the instance of Firefox process that is running on your computer?
Try this:
PS /> Get-Process -Name firefox Handles NPM(K) PM(K) WS(K) CPU(s) Id ProcessName ------- ------ ----- ----- ------ -- ----------- - - - 74 403.150 1209 firefox
Want to get back more than one process? Then just specify process names and separate them with commas.
PS /> Get-Process -Name firefox, powershell Handles NPM(K) PM(K) WS(K) CPU(s) Id ProcessName ------- ------ ----- ----- ------ -- ----------- - - - 74 403.150 1209 firefox - - - 21 20.220 449 powershell
-
Clear-Host
: Clears the display in the host program.PS /> Get-Process PS /> Clear-Host
Type too much just for clearing the screen?
Here is how the alias can help.
-
Get-Alias
: Gets the aliases for the current session.Get-Alias CommandType Name ----------- ---- … Alias cd -> Set-Location Alias cls -> Clear-Host Alias clear -> Clear-Host Alias copy -> Copy-Item Alias dir -> Get-ChildItem Alias gc -> Get-Content Alias gmo -> Get-Module Alias ri -> Remove-Item Alias type -> Get-Content …
As you can see
cls
orclear
is an alias ofClear-Host
.Now try it:
PS /> Get-Process PS /> cls
-
cd -> Set-Location
: Sets the current working location to a specified location.PS /> Set-Location /home PS /home>
-
dir -> Get-ChildItem
: Gets the items and child items in one or more specified locations.# Get all files under the current directory: PS /> Get-ChildItem # Get all files under the current directory as well as its subdirectories: PS /> cd $home PS /home/jen> dir -Recurse # List all files with "txt" file extension. PS /> cd $home PS /home/jen> dir –Path *.txt -Recurse
-
New-Item
: Creates a new item.# An empty file is created if you type the following: PS /home/jen> New-Item -Path ./test.txt Directory: /home/jen Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/7/2016 7:17 PM 0 test.txt
You can use the
-Value
parameter to add some data to your file.For example, the following command adds the phrase
Hello world!
as a file content to thetest.txt
.Because the test.txt file exists already, we use
-Force
parameter to replace the existing content.PS /home/jen> New-Item -Path ./test.txt -Value "Hello world!" -Force Directory: /home/jen Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 7/7/2016 7:19 PM 24 test.txt
There are other ways to add some data to a file.
For example, you can use
Set-Content
to set the file contents:PS /home/jen>Set-Content -Path ./test.txt -Value "Hello world again!"
Or simply use
>
as below:# create an empty file "" > test.txt # set "Hello world!" as content of test.txt file "Hello world!!!" > test.txt
The pound sign
#
above is used for comments in PowerShell. -
type -> Get-Content
: Gets the content of the item at the specified location.PS /home/jen> Get-Content -Path ./test.txt PS /home/jen> type -Path ./test.txt Hello world again!
-
del -> Remove-Item
: Deletes the specified items.This cmdlet will delete the file
/home/jen/test.txt
:PS /home/jen> Remove-Item ./test.txt
-
$PSVersionTable
: Displays the version of PowerShell you are currently using.Type
$PSVersionTable
in your PowerShell session, you will see something like below. "PSVersion" indicates the PowerShell version that you are using.Name Value ---- ----- PSVersion 6.0.0-alpha PSEdition Core PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} BuildVersion 3.0.0.0 GitCommitId v6.0.0-alpha.12 CLRVersion WSManStackVersion 3.0 PSRemotingProtocolVersion 2.3 SerializationVersion 1.1.0.1
-
Exit
: To exit the PowerShell session, typeexit
.exit
Need Help?
The most important command in PowerShell is possibly the Get-Help
, which allows you to quickly learn PowerShell without having to search around the internet.
The Get-Help
cmdlet also shows you how PowerShell commands work with examples.
It shows the syntax and other technical information of the Get-Process
cmdlet.
PS /> Get-Help -Name Get-Process
It displays the examples how to use the Get-Process
cmdlet.
PS />Get-Help -Name Get-Process -Examples
If you use -Full parameter, for example, Get-Help -Name Get-Process -Full
, it will display more technical information.
Discover Commands Available on Your System
You want to discover what PowerShell cmdlets available on your system? Just run Get-Command
as below:
PS /> Get-Command
If you want to know whether a particular cmdlet exists on your system, you can do something like below:
PS /> Get-Command Get-Process
If you want to know the syntax of Get-Process
cmdlet, type:
PS /> Get-Command Get-Process -Syntax
If you want to know how to use the Get-Process
, type:
PS /> Get-Help Get-Process -Example
PowerShell Pipeline |
Sometimes when you run Get-ChildItem or "dir", you want to get a list of files and folders in a descending order. To achieve that, type:
PS /home/jen> dir | Sort-Object -Descending
Say you want to get the largest file in a directory
PS /home/jen> dir | Sort-Object -Property Length -Descending | Select-Object -First 1
Directory: /home/jen
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 5/16/2016 1:15 PM 32972 test.log
How to Create and Run PowerShell scripts
You can use Visual Studio Code or your favorite editor to create a PowerShell script and save it with a .ps1
file extension.
For more details, see Create and Run PowerShell Script Guide
Recommended Training and Reading
- Video: Get Started with PowerShell from Channel9
- eBooks from PowerShell.org
- eBooks List by Martin Schvartzman
- Tutorial from MVP
- Script Guy blog: The best way to Learn PowerShell
- Understanding PowerShell Module
- How and When to Create PowerShell Module by Adam Bertram
- Video: PowerShell Remoting in Depth from Channel9
- PowerShell Basics: Remote Management from ITPro
- Running Remote Commands from PowerShell Web Docs
- Samples for Writing a PowerShell Script Module
- Writing a PowerShell module in C#
- Examples of Cmdlets Code
Commercial Resources
- Windows PowerShell in Action by Bruce Payette
- Windows PowerShell Cookbook by Lee Holmes