在Windows系统中,默认情况下是不允许直接执行.ps1
(PowerShell脚本)文件的,因为这可能带来安全风险。但你可以通过更改PowerShell的执行策略来允许执行这些脚本。以下是具体步骤:
一、以管理员身份运行PowerShell
由于更改执行策略是一个高级操作,你需要以管理员身份运行PowerShell。你可以通过以下方式实现:
- 在Windows搜索栏中输入“PowerShell”。
- 右键单击“Windows PowerShell”或“Windows PowerShell ISE”(取决于你习惯使用的版本),并选择“以管理员身份运行”。
二、查看当前执行策略
在更改执行策略之前,你可以先查看当前的执行策略,以便了解当前的安全设置。使用以下命令:
Get-ExecutionPolicy
这将显示当前的执行策略,例如Restricted
(受限)、AllSigned
(所有脚本必须有签名)、RemoteSigned
(本地脚本不受签名限制,远程脚本必须有签名)或Bypass
(不受限制)。
三、更改执行策略
为了允许执行.ps1
脚本,你需要将执行策略更改为RemoteSigned
(如果你信任本地脚本并且希望允许运行经过签名的远程脚本)或Bypass
(如果你希望允许运行所有脚本,无论是否签名)。但请注意,Bypass
策略可能会降低系统的安全性。
使用以下命令之一来更改执行策略:
- 将执行策略设置为 RemoteSigned 本地脚本不受限,要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名
# 将执行策略设置为 RemoteSigned 本地脚本不受限,要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名
Set-ExecutionPolicy RemoteSigned
- 或者,将执行策略设置为 Bypass 不阻止任何操作,并且没有任何警告或提示(注意:这可能会降低系统的安全性)
# 将执行策略设置为 Bypass 不阻止任何操作,并且没有任何警告或提示(注意:这可能会降低系统的安全性)
Set-ExecutionPolicy Bypass
上面的代码需要以管理员身份运行, 没有指定 -scope
相当于 -scope LocalMachine
相当于以下代码
# 将执行策略设置为 RemoteSigned 本地脚本不受限,要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
# 将执行策略设置为 Bypass 不阻止任何操作,并且没有任何警告或提示(注意:这可能会降低系统的安全性)
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope LocalMachine
如果指定 -Scope CurrentUser
则可以无需管理员权限
# 将执行策略设置为 RemoteSigned 本地脚本不受限,要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 将执行策略设置为 Bypass 不阻止任何操作,并且没有任何警告或提示(注意:这可能会降低系统的安全性)
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
Set-ExecutionPolicy
-ExecutionPolicy
参数
指定执行策略。 如果没有组策略,并且每个范围的执行策略都设置为 Undefined,则 Restricted 将成为所有用户的有效策略。
可接受的执行策略值如下所示:
AllSigned
。 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。Bypass
。 不阻止任何操作,并且没有任何警告或提示。Default
。 设置默认执行策略。 Restricted 适用于 Windows 客户端或 RemoteSigned Windows 服务器。RemoteSigned
。 要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名。 Windows 服务器计算机的默认执行策略。Restricted
。 不加载配置文件或运行脚本。 Windows 客户端计算机的默认执行策略。Undefined
。 没有为范围设置执行策略。 从组策略未设置的范围中删除分配的执行策略。 如果所有范围内的执行策略为 Undefined,则有效执行策略为 Restricted。Unrestricted
。 从 PowerShell 6.0 开始,这是非 Windows 计算机的默认执行策略,无法更改。 加载所有配置文件并运行所有脚本。 如果运行从 Internet 下载的未签名脚本,则系统将提示你需要权限才能运行该脚本。
-Scope
参数
指定受执行策略影响的范围。 默认作用域为 LocalMachine.
有效的执行策略按优先级顺序确定,如下所示:
MachinePolicy
- 由计算机的所有用户的组策略设置UserPolicy
- 由计算机的当前用户的组策略设置Process
- 仅影响当前 PowerShell 会话LocalMachine
- 影响计算机所有用户的默认范围CurrentUser
- 仅影响当前用户Process
作用域仅影响当前的 PowerShell 会话。 执行策略保存在环境变量 $env:PSExecutionPolicyPreference 中,而不是注册表中。 关闭 PowerShell 会话时,将删除变量和值。
作用域 CurrentUser 的执行策略将写入注册表配置单元 HKEY_LOCAL_USER。
作用域 LocalMachine 的执行策略将写入注册表配置单元 HKEY_LOCAL_MACHINE。
File cannot be loaded because running scripts is disabled on this system
原因: 系统禁止运行Powershell脚本(xx.ps1)文件,
解决办法:
无需管理员权限的控制台执行↓ (对当前用户有效)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
需要管理员权限执行↓ (对所有用户生效)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
参数: RemoteSigned
:允许执行本地脚本, 远程脚本必须由可信发布者签名。
错误消息 “File cannot be loaded because running scripts is disabled on this system” 通常出现在尝试运行 PowerShell 脚本时,而系统的执行策略设置为禁止运行脚本。这是为了防止潜在的不安全脚本执行。
要解决这个问题,您需要更改 PowerShell 的执行策略。但是,请注意,更改执行策略可能会带来安全风险,特别是当您允许从不受信任的来源运行脚本时。
以下是如何更改 PowerShell 执行策略的步骤:
-
以管理员身份运行 PowerShell:
- 在 Windows 搜索栏中输入 “PowerShell”,然后右键单击 “Windows PowerShell” 或 “Windows PowerShell ISE”(取决于您要使用的版本),并选择 “以管理员身份运行”。
-
更改执行策略:
-
使用
Set-ExecutionPolicy
cmdlet 来更改执行策略。例如,要允许运行本地 PowerShell 脚本,您可以使用以下命令:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
这个命令将执行策略设置为
RemoteSigned
,这意味着您可以运行本地脚本和由受信任的发布者签名的远程脚本。-Scope CurrentUser
参数表示更改仅对当前用户生效。 -
如果您想为所有用户更改执行策略(需要管理员权限),可以使用
-Scope Machine
参数:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Machine
RemoteSigned
:允许执行本地脚本, 远程脚本必须由可信发布者签名。
-
其他可用的执行策略包括:
Restricted
:默认设置,不允许运行任何脚本。AllSigned
:只有由受信任的发布者签名的脚本才能运行。Bypass
:允许运行所有脚本而不进行任何警告或提示。Undefined
:未设置执行策略, 继承父级策略
-
-
确认更改:
- 系统可能会要求您确认更改。输入
Y
并按 Enter 键以确认。
- 系统可能会要求您确认更改。输入
-
重新尝试运行脚本:
- 在更改执行策略后,尝试再次运行您的脚本。
请记住,将执行策略设置为 Bypass
或允许运行未签名的脚本可能会使您的系统面临安全风险。始终确保您信任的脚本来源,并谨慎处理从不受信任来源下载的脚本。
Set-ExecutionPolicy 命令
Set-ExecutionPolicy
是 PowerShell 中的一个 cmdlet,用于更改 PowerShell 脚本的执行策略。执行策略是一种安全功能,用于确定哪些 PowerShell 脚本可以在您的计算机上运行。通过更改执行策略,您可以控制是否允许运行本地脚本、远程签名的脚本或所有脚本,以及是否需要对运行脚本进行警告或确认。
以下是 Set-ExecutionPolicy
cmdlet 的一些常用选项和用法:
常用选项
-ExecutionPolicy <string>
:指定要设置的执行策略。有效的策略包括Restricted
、AllSigned
、RemoteSigned
和Bypass
。-Scope <ExecutionPolicyScope>
:指定执行策略的作用范围。有效的范围包括Process
、CurrentUser
、MachinePolicy
和UserPolicy
。默认情况下,范围是CurrentUser
。-Force
:强制更改执行策略,而不提示用户确认。-Confirm
:在更改执行策略之前提示用户确认。这是默认行为,除非使用了-Force
参数。-WhatIf
:显示如果更改执行策略将发生的情况,但不会实际更改它。
Set-ExecutionPolicy RemoteSigned
是一个 PowerShell 命令,用于设置 PowerShell 脚本的执行策略。在 PowerShell 中,执行策略是一种安全功能,它确定哪些脚本可以运行以及在哪些条件下运行。RemoteSigned
是执行策略的一种类型。
执行策略
执行策略是 PowerShell 的一种安全功能,用于控制哪些脚本可以运行以及在哪些条件下运行。以下是 Set-ExecutionPolicy
命令可用的主要策略及其描述:
-
Restricted:
- 描述:最严格的策略,不允许运行任何脚本文件,包括本地脚本和远程脚本。
- 安全性:高,因为不允许运行任何脚本,从而减少了潜在的安全风险。
-
AllSigned:
- 描述:只允许运行经过数字签名的脚本文件,无论是本地还是远程脚本。
- 安全性:中等偏高,因为要求所有脚本都必须经过签名,从而确保脚本的来源可信。
-
RemoteSigned:
- 描述:允许运行本地创建的脚本,但从互联网下载的脚本必须有一个数字签名才能运行。
- 安全性:中等,因为本地脚本不受签名限制,但远程脚本需要签名。
-
Unrestricted:
- 描述:允许运行所有脚本文件,包括未经数字签名的远程脚本文件。
- 安全性:低,因为不限制任何脚本的运行,可能会暴露系统于潜在的恶意软件攻击。
-
Bypass:
- 描述:不阻止任何脚本的运行,也不显示任何警告或提示。
- 安全性:非常低,因为完全绕过了执行策略的安全检查。
-
Undefined:
- 描述:不设置执行策略,使用父级作用域的执行策略。
- 安全性:取决于父级作用域的执行策略。
使用示例:
# 将执行策略设置为 RemoteSigned
Set-ExecutionPolicy RemoteSigned
# 将执行策略设置为 Unrestricted(注意:这可能会降低系统的安全性)
Set-ExecutionPolicy Unrestricted
# 将执行策略设置为 AllSigned,并指定作用域为用户级别
Set-ExecutionPolicy AllSigned -Scope CurrentUser
总之,选择适当的执行策略对于确保 PowerShell 环境的安全性至关重要。管理员应根据实际情况和需要来设置执行策略,以平衡安全性和功能性。
RemoteSigned 执行策略的含义:
- 本地脚本:不受限制,可以运行。
- 从互联网下载的脚本:需要由受信任的发布者签名才能运行。
- 从 Intranet(内部网络)下载的脚本:不受签名限制,可以运行。
使用 Set-ExecutionPolicy RemoteSigned
的步骤:
-
以管理员身份运行 PowerShell:因为设置执行策略是一个高级操作,需要管理员权限。
-
执行命令:在 PowerShell 窗口中,输入以下命令并按回车:
Set-ExecutionPolicy RemoteSigned
-
确认更改:系统可能会要求你确认是否要更改执行策略。根据提示输入
Y
并按回车确认。
-
更改执行策略会影响整个系统或当前用户的 PowerShell 环境,具体取决于你使用的
-Scope
参数(如果未指定,默认为AllUsers
)。 -
如果你只是希望为当前会话更改执行策略(不影响其他会话或用户),可以使用
-Scope CurrentUser
参数:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
-
在某些情况下,特别是在企业环境中,执行策略可能已经由系统管理员锁定,你可能没有权限更改它。
通过设置 RemoteSigned
执行策略,你可以确保从本地或内部网络运行的脚本不受限制,同时要求从互联网下载的脚本具有签名以增加安全性。
用法示例
-
为当前用户设置 RemoteSigned 策略:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
这将允许当前用户运行本地脚本和由受信任的发布者签名的远程脚本。
-
为所有用户设置 AllSigned 策略:
Set-ExecutionPolicy -ExecutionPolicy AllSigned -Scope Machine -Force
这将为计算机上的所有用户设置策略,要求所有脚本必须由受信任的发布者签名才能运行,并且不会提示用户确认更改。
-
查看当前执行策略:
虽然这不是Set-ExecutionPolicy
的直接用法,但您可以使用Get-ExecutionPolicy
cmdlet 来查看当前的执行策略:Get-ExecutionPolicy -List
这将显示所有作用范围及其对应的执行策略。
注意事项
- 更改执行策略可能会影响系统的安全性。特别是将策略设置为
Bypass
时,将允许运行所有脚本而不进行任何检查,这可能会使系统面临恶意脚本的攻击。