How to Run a PowerShell Script From the Command Line and More

Published:12 November 2021 - 6 min. read

If you’re new to the PowerShell scripting language and want to learn how to run PowerShell script, you’ve come to the right blog post. This blog will be a tutorial covering common ways to run scripts and a few issues that may pop up.

Not a reader? Watch this related video tutorial!
Not seeing the video? Make sure your ad blocker is disabled.

Prerequisites

This article will be a walkthrough for you about how to run PowerShell on your local computer. If you’d like to follow along, please be sure you have the following prerequisites in place before starting this article.

  • A Windows 10 computer with Administrator privileges.
  • Windows PowerShell v5 or higher (PowerShell v7) – This tutorial uses Windows PowerShell v5.

Dealing with the Execution Policy

If this is the first time you’re trying to execute a Windows PowerShell script, you may run into a common problem. PowerShell will probably return an error message stating that a script “cannot be loaded because running scripts is disabled on this system”.

PS> .\GetServices.ps1
 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at
 https:/go.microsoft.com/fwlink/?LinkID=135170.
 At line:1 char:1
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell returns the error message above when you try to run a PowerShell with an execution policy set to Restricted, Remote Signed or All Signed.

Restricted

Restricted is the default policy set for Windows client computers. If you are using PowerShell for the first time, your default policy would probably be set to restrict all the scripts.

You can still execute individual commands in a terminal, but not a script file. The restriction includes any file ending with .ps1xml, .psm1 or .ps1.

Unrestricted

Unrestricted allows you to run any script however, it warns you before execution if the script is downloaded from the internet. This policy is usually the default for any non-windows devices.

Remote Signed

Remote Signed policy allows you to run any script that is either (a) digitally signed or (b) any script written on your local computer with or without a signature.

If a script is downloaded from the internet and not signed, you would need to unblock the file. You can do so by right-clicking on the file and choosing Properties. Or, you could use the Unblock-File PowerShell cmdlet for that particular script file.

Using a Remote signed policy would be an ideal option when running a script downloaded from the internet.

All Signed

All signed requires all the scripts to be signed digitally by a trusted publisher. This includes the scripts downloaded from the internet and written locally on your computer.

Changing the PowerShell Execution Policy

With the different execution policies in mind, you now work on adjusting the restrictions that dictate script execution within PowerShell—changing the PowerShell execution policy. Understanding and tweaking the execution policy is pivotal for unlocking the full potential of PowerShell scripting.

To change the execution policy:

1. Open Windows PowerShell with Run as Administrator to ensure you have the highest permission to make the policy changes.

Search PowerShell in Start Menu
Search PowerShell in the Start Menu

2. When open, run the following PowerShell command to set your computer’s execution policy. The execution policy, as covered above, can be one of three different types. This tutorial is using a useful yet still secure execution policy of RemoteSigned.

Since this tutorial assumes you’ve downloaded from the Internet the GetServices.ps1 script file, set the execution policy to RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

The RemoteSigned execution policy forces you to cryptographically sign every PowerShell script downloaded from the Internet before PowerShell will run it on your system.

3. You should see an output requesting to confirm the action. Enter Y and hit enter to confirm the policy change.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

At this point, follow the next steps to explore different methods to run the PowerShell script on your computer.

How to Run PowerShell Script

To demonstrate running a PowerShell script, you actually need a script file to run! If you don’t have one handy, download this ZIP file and extract the PS1 file within. You’ll find a simple script file inside called GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

Every PowerShell script should end with a .ps1 extension.

Using the Console

Once you have a script ready, there are a few different ways you can execute a PowerShell script file. One of the most common ways is via the PowerShell console.

1. Open the PowerShell console as shown above.

2. Navigate to the file system location where your script is located using the Set-Location PowerShell cmdlet or the cd alias. This tutorial’s script is found in the C:\Temp directory.

PS> cd C:\Temp\

3. Run the script using a dot (.) notation. PowerShell is a shell that also looks for command names. To differentiate between a PowerShell command and a script, you must preface the script with a dot. This dot represents the current directory.

PS> .\GetServices.ps1

How to Run a PowerShell Script from the Command Line via the PowerShell Location

If you can’t or would rather not run scripts via the PowerShell console, you can also do so with the good ol’ command line (command prompt).

To run scripts via the command prompt, you must first start up the PowerShell executable (powershell.exe), with the PowerShell location of C:\Program Files\WindowsPowerShell\powershell.exe and then pass the script path as a parameter to it.

You can run scripts with parameters in any context by simply specifying them while running the PowerShell executable like powershell.exe -Parameter 'Foo' -Parameter2 'Bar'.

Once you open cmd.exe, you can execute a PowerShell script like below. This example is running the engine and passing it the script path of C:\Temp\GetServices.ps1.

Notice below that the example below is using the PowerShell location path to run the script. You’ll have to do this if the folder isn’t in your PATH somewhere.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

The PowerShell location for PowerShell 7 uses a different executable named pwsh.exe typically located in C:\Program Files\PowerShell\7\pwsh.exe.

Below is a handy YouTube video that covers executing a script via a batch file which the cmd.exe executes.

https://www.youtube.com/watch?v=-IKSBNYs5Jo

Using the PowerShell ISE

If you create your own scripts or edit others’, you’ll probably be using a script editor like the PowerShell ISE or maybe Visual Studio (VS) Code. Since the ISE comes with Windows, let’s focus on that method for this tutorial.

To invoke a script via the ISE:

1. Navigate to Start Menu, search for PowerShell ISE and open it.

Search PowerShell ISE in Start Menu
Search PowerShell ISE in Start Menu

2. Click on FileOpen and find your script.

Open Script using File Menu
Open Script using File Menu

3. With the script open, click on the green run button to execute the script. This button will invoke the script in the built-in PowerShell terminal at the bottom.

Run Script using PowerShell ISE
Run Script using PowerShell ISE

The Sample Script’s Output

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

If you run the sample GetServices.ps1 script, you will see the following. This script runs the Get-Service cmdlet which returns all of the services installed on your local Windows computer.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

Running a PowerShell Script from Within a Script

Let’s say you have two scripts and you’d like one to call the other. Perhaps you have a script called GetUser.ps1 and one called ResetPassword.ps1. Inside of the GetUser.ps1 script, you’d like to execute the ResetPassword.ps1 to reset a user password.

Inside of the calling script (GetUser.ps1), you’d add a line to execute the other script just like you would call the script from the command line.

You can see below you have a couple of options. You should typically choose to run the other script within the same session or scope to simplify things unless you have a specific reason to run the script in another PowerShell session.

## To run the other script in a new session
powershell.exe .\ResetPassword.ps1
## To run the other script in the same session
.\ResetPassword.ps1

Hate ads? Want to support the writer? Get many of our tutorials packaged as an ATA Guidebook.

Explore ATA Guidebooks

Looks like you're offline!