现有的大多数答案都解释了“ 如何” ,但很少有答案解释了“ 为什么” 。在你执行互联网上陌生人的代码(尤其是禁用安全措施的代码)之前,你应该确切地了解你在做什么。所以这里对这个问题更详细一点。
来自 TechNet 关于执行策略页面 :
Windows PowerShell 执行策略允许您确定 Windows PowerShell 加载配置文件和运行脚本的条件。
PowerShell 基础知识 - 执行策略和代码签名 列举了其好处 ,包括:
-
执行控制 - 控制执行脚本的信任级别。
-
命令劫持 - 防止在我的路径中注入命令。
-
身份 - 该脚本是否由我信任的开发人员创建和签名,和/或使用我信任的证书颁发机构的证书签名。
-
完整性 ——脚本不能被恶意软件或恶意用户修改。
要检查当前的执行策略,可以运行 Get-ExecutionPolicy
。但你来这里可能是因为你想改变它。
为此,您需要运行 Set-ExecutionPolicy
cmdlet。
更新执行策略时,您需要做出两个重要决定。
执行策略类型:
-
受限
†- 系统上无法执行本地、远程或下载的脚本。
-
AllSigned-
所有运行的脚本都需要经过数字签名。
-
RemoteSigned-
所有远程脚本(UNC)或下载都需要签名。
-
不受限制
- 不需要任何类型的脚本签名。
新变更的范围
-
LocalMachine
†- 执行策略影响计算机的所有用户。
-
CurrentUser-
执行策略仅影响当前用户。
-
进程
- 执行策略仅影响当前 Windows PowerShell 进程。
† = 默认
例如 :如果您想要将策略更改为仅针对 CurrentUser 的 RemoteSigned,您可以运行以下命令:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
注意 :为了更改执行策略,您必须 以管理员身份运行 PowerShell 。如果您处于常规模式并尝试更改执行策略,您将收到以下错误:
拒绝访问注册表项“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell”。要更改默认 (LocalMachine) 范围的执行策略,请使用“以管理员身份运行”选项启动 Windows PowerShell。
如果您想加强对未从互联网下载的自己的脚本(或至少不包含 UNC 元数据)的内部限制,您可以强制策略仅运行已签名的脚本。要对自己的脚本进行签名,您可以按照 Scott Hanselman 的“ 签名 PowerShell 脚本” .
注意 :大多数人打开 PowerShell 时都可能会遇到此错误,因为 PowerShell 启动时尝试做的第一件事就是执行您的用户配置文件脚本,按照您的喜好设置您的环境。
该文件通常位于:
%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
您可以通过运行 PowerShell 变量来找到确切的位置
$profile
如果配置文件中没有任何您关心的内容,并且不想对安全设置大惊小怪,那么您可以直接删除它,PowerShell 将找不到它无法执行的任何内容。