PowerShell/docs/learning-powershell/powershell-beginners-guide.md
xtqqczze 921d36d9f4
Fix markdown ordered lists (#12657)
# 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).
2020-05-28 08:29:56 +00:00

11 KiB
Raw Blame History

PowerShell Beginners 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. Lets 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.

  1. 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
    
    
  2. 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.

  3. 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 or clear is an alias of Clear-Host.

    Now try it:

    PS /> Get-Process
    PS /> cls
    
  4. cd -> Set-Location: Sets the current working location to a specified location.

    PS /> Set-Location /home
    PS /home>
    
  5. 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
    
  6. 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 the test.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.

  7. 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!
    
  8. del -> Remove-Item: Deletes the specified items.

    This cmdlet will delete the file /home/jen/test.txt:

    PS /home/jen> Remove-Item ./test.txt
    
  9. $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
    
    
  10. Exit: To exit the PowerShell session, type exit.

    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

Commercial Resources