If you’re new to the PowerShell scripting language and want to learn how to run a 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.
Table of Contents
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 version 5 or higher. You can also use PowerShell v7. This tutorial will focus on Windows PowerShell since the Windows operating system already has it.
- Any text file editor
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 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
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 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 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
To change the execution policy:
- Open Windows PowerShell with Run as Administrator to make sure you have the highest permission to make the policy changes.
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.
Running a 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
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.
To do so:
- Open the PowerShell console as shown above.
2. Navigate to the file system location 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.
Running a PowerShell Script from the Command Line
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 engine (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 full 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"
Below is a handy YouTube video that covers executing a script via a batch file which the cmd.exe executes.
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:
- Navigate to Start Menu, search for PowerShell ISE and open it.
2. Click on File → Open and find your script.
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.
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