无法加载Powershell profile.ps1,因为其操作被软件限制策略阻止

Mar*_*rth 3 powershell

启动PowerShell主机(powershell.exe,PowerShellISE,NuGet包管理器控制台等)时,我收到以下错误消息.

无法加载文件C:\ Users\MyUserName\Documents\WindowsPowerShell\profile.ps1,因为其操作被软件限制策略阻止.有关更多信息,请与系统管理员联系.

在NuGet包管理器控制台的情况下,这尤其成问题,因为控制台在错误之后处于禁用/不可用状态.至少可以使用其他PowerShell主机.

我有问题在几个星期前,在新的工作岗位设置时,我的工作站,因为组策略设置被应用MachinePolicy是AllSigned.通过将设置更改为RemoteSigned已解决该问题.我使用以下命令检查了此设置是否仍然存在:

Get-ExecutionPolicy -List
Run Code Online (Sandbox Code Playgroud)

我还确认这个$ profile.CurrentUserAllHosts文件存在,但我的互联网搜索另一个"组策略设置"显示没有任何兴趣.我的PowerShell版本信息是:

$PSVersionTable

Name                           Value
----                           -----
PSVersion                      3.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18408
BuildVersion                   6.2.8370.0
PSCompatibleVersions           {1.0, 2.0, 3.0}
PSRemotingProtocolVersion      2.2
Run Code Online (Sandbox Code Playgroud)

Mar*_*rth 9

如果我删除或移动问题配置文件脚本,那么我的所有PowerShell主机都会启动而不会出现错误,包括使用它自己的当前用户当前主机脚本的PowerShell ISE C:\ Users\MyUserName\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

事实证明,我的All Hosts配置文件脚本的问题是它完全是空的!将任何内容添加到文件中,甚至是单个空格字符或注释,都允许所有各种PowerShell主机执行此配置文件脚本.我必须在某个时候清除此脚本的内容,而不是删除它.

这不是一个直观的错误消息,这就是我发布此问答风格条目以供将来参考的原因.

有趣的是,我可以在它们启动后在所有主机中执行空/空脚本,这个问题似乎特定于配置文件脚本.

  • 实际上,尝试运行像`powershell empty.ps1`这样的空文件会导致同样的错误消息!当我只是在文件中添加一个`#`字符时,错误就消失了.看起来这只是一个误导性的错误消息. (2认同)

小智 5

删除两个文件

C:\Users\MyUserName\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1
C:\Users\MyUserName\Documents\WindowsPowerShell\profile.ps1
Run Code Online (Sandbox Code Playgroud)