PowerShell says "execution of scripts is disabled on this system."
Categories:
Resolving 'Execution of Scripts is Disabled' in PowerShell on Windows Server 2008 R2

Learn why PowerShell scripts are blocked by default and how to safely configure execution policies on Windows Server 2008 R2 to enable script execution.
When attempting to run a PowerShell script on a Windows Server 2008 R2 system, you might encounter the error message: "File <script_name>.ps1 cannot be loaded. The execution of scripts is disabled on this system. Please see 'get-help about_signing' for more details." This is a common security measure implemented by Microsoft to prevent the accidental or malicious execution of unsigned scripts. This article will guide you through understanding PowerShell's execution policies and the steps required to safely enable script execution on your Windows Server 2008 R2 environment.
Understanding PowerShell Execution Policies
PowerShell execution policies are a security feature that controls the conditions under which PowerShell loads configuration files and runs scripts. This feature helps prevent the execution of malicious scripts. It's important to note that execution policies are not a security boundary; they are designed to prevent users from inadvertently running scripts. A determined attacker can bypass them. On Windows Server 2008 R2, the default execution policy is typically Restricted
, which means no scripts can be run, and PowerShell can only be used in interactive mode.
flowchart TD A[User attempts to run PowerShell script] --> B{Is script execution enabled?} B -- No --> C["Error: 'Execution of scripts is disabled'"] B -- Yes --> D{Is script signed or trusted?} D -- No (e.g., RemoteSigned) --> E["Prompt: 'Do you want to run this script?'"] D -- Yes --> F[Script executes] E -- Yes --> F E -- No --> G[Script execution blocked]
PowerShell Script Execution Flow with Policy Checks
Common Execution Policies
PowerShell offers several execution policies, each with different security implications. Understanding these is crucial for choosing the right one for your environment:
Restricted
: The default policy. No scripts can be run. PowerShell can be used only in interactive mode.AllSigned
: Only scripts signed by a trusted publisher can be run. This includes scripts you create on the local computer.RemoteSigned
: Scripts downloaded from the internet must be signed by a trusted publisher. Local scripts do not require a digital signature.Unrestricted
: All PowerShell scripts can be run. This policy is generally not recommended for production environments due to security risks.Bypass
: Nothing is blocked and no warnings are issued. This policy is designed for specific scenarios where a script host fully controls the execution environment.Undefined
: No execution policy is set for the current scope. If no policy is set in any scope, theRestricted
policy is effective.
RemoteSigned
is a good balance between security and usability. It allows you to run your own local scripts without signing them, while still providing protection against unsigned scripts downloaded from the internet.Checking and Changing the Execution Policy
Before making any changes, it's good practice to check the current execution policy on your system. You can then modify it to allow script execution. Remember that execution policies can be set at different scopes (MachinePolicy, UserPolicy, Process, CurrentUser, LocalMachine), with more restrictive policies taking precedence.
1. Open PowerShell as Administrator
Right-click on the PowerShell icon and select 'Run as administrator'. This is crucial for making system-wide changes to the execution policy.
2. Check the Current Execution Policy
In the PowerShell console, type the following command to see the current policy settings for all scopes:
Get-ExecutionPolicy -List
This will show you which policy is active for MachinePolicy
, UserPolicy
, Process
, CurrentUser
, and LocalMachine
.
3. Set a New Execution Policy
To change the execution policy, use the Set-ExecutionPolicy
cmdlet. For example, to set the policy to RemoteSigned
for the LocalMachine
scope (which affects all users on the computer), use:
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
You will be prompted to confirm the change. Type Y
and press Enter. If you only want to affect the current user, you can use -Scope CurrentUser
instead. For temporary changes within the current PowerShell session, use -Scope Process
.
4. Verify the Change
After setting the new policy, run Get-ExecutionPolicy -List
again to confirm that your desired policy is now active for the specified scope.
# Check current execution policies
Get-ExecutionPolicy -List
# Example output:
# Scope ExecutionPolicy
# ----- ---------------
# MachinePolicy Undefined
# UserPolicy Undefined
# Process Undefined
# CurrentUser Undefined
# LocalMachine Restricted
# Set the execution policy to RemoteSigned for the local machine
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
# Confirm the change
Get-ExecutionPolicy -List
Commands to check and set PowerShell execution policies
Unrestricted
or Bypass
policies might seem convenient, they significantly reduce your system's security. Only use them in highly controlled environments or for specific, temporary debugging purposes, and revert to a more secure policy immediately afterward.