powershell - PowerShell “execution of scripts is disabled on this system.”

  显示原文与译文双语对照的内容

我正在尝试运行一个. cmd 文件,该文件从命令提示符调用一个PowerShell脚本,并得到以下错误:

无法加载 Management_Install.ps1,因为这里系统上的脚本执行已经被禁用。

我已经运行了 set-executionpolicy unrestricted,当我从PowerShell运行 get-executionpolicy 时得到 unrestricted

//Output 中

PS: usersadministrator> get-executionpolicy

无限制

来自DOS的//Output

c: projectsmicrosoft 。实践。esbsourcesamplesmanagement PortalInstallScr

> 。management_install 。ps1 1

警告:正在运行 x86 powershell 。。

无法加载文件 C:ProjectsMicrosoft. 。esbsourcesamplesmanagement portalinstallscriptsmanagement_install 。ps1,因为在这里系统上禁用脚本的执行。 有关详细信息,请参阅"get-help about_signing"。

line:1 字符:25

  • management_install 。ps1 << <<1

    • CategoryInfo: NotSpecified: (: ) [],PSSecurityException

    • FullyQualifiedErrorId: RuntimeException

c: projectsmicrosoft 。实践。esbsourcesamplesmanagement PortalInstallScripts> 暂停

请点击任意键以继续下去." ..

系统是 Windows Server 2008 R2.

我做错什么了?

时间:

如果你正在使用 Windows 2008 R2,那么有一个x64和x86版本,它们都必须有执行策略。 你是否在两个主机中设置了执行策略?

你可以通过在powershell窗口中键入以下命令来设置执行策略:

Set-ExecutionPolicy RemoteSigned

有关更多信息,请参见这里的

在 Windows 2012正在运转的x64 one,我以前也有类似的问题和注意的是,默认

对于 Windows 7Windows 8Windows Server 2008 R2 或者 Windows Server 2012 作为管理员:,请运行以下命令

x86
打开 C:Windowssystem32cmd.exe
运行命令 powershell Set-ExecutionPolicy RemoteSigned

x64
打开 C:WindowsSysWOW64cmd.exe
运行命令 powershell Set-ExecutionPolicy RemoteSigned

你应该在这里阅读各种执行策略,它们允许:
MSDN - Windows POWERSHELL执行策略

在 Windows 7中:

转到 开始菜单 并搜索"Windows PowerShell"。

右键单击x86版本并选择"作为管理员运行"。

在顶部,粘贴 Set-ExecutionPolicy RemoteSigned ;运行脚本。 选择"是是"。

对 64位 ISE的版本重复这些步骤。

我正在澄清 @Chad Miller暗示的步骤。 感谢查德 !

RemoteSigned: 你自己创建的所有脚本都将运行,所有从互联网下载的脚本都需要由受信任的发布者签名。

好,只需键入以下命令更改策略:


Set-ExecutionPolicy RemoteSigned

如果你所在的环境不是管理员,你可以只为你设置执行策略,它将不需要管理员。


Set-ExecutionPolicy -Scope"CurrentUser" -ExecutionPolicy"RemoteSigned"

或者


Set-ExecutionPolicy -Scope"CurrentUser" -ExecutionPolicy"Unrestricted"

你可以在帮助条目中阅读所有关于它的内容。


Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full

大部分现有的答案解释的为什么 如何,但是很少有解释的。 在你执行来自互联网陌生人的代码,特别是禁用安全措施的代码之前,你应该明白你在做什么。 这里是关于这个问题的更多细节。

从 TechNet 关于执行策略页面:

Windows 执行策略允许你确定 Windows PowerShell加载配置文件和运行脚本的条件。

PowerShell的基础- 执行策略和代码签名 。are枚举的好处是:

  • 执行控制Execution控制执行脚本的信任级别。
  • 磅的命令 Highjack - 防止在我的路径中插入命令。
  • 标识是由开发人员本人创建和签名的脚本,或者由证书颁发机构的证书颁发机构签署的证书。
  • 完整的完整性 - 脚本不能被恶意软件或者恶意用户修改。

要检查当前执行策略,可以运行 Get-ExecutionPolicy 。 但是你可能在这里,因为你想改变它。

为此,你将运行 Set-ExecutionPolicy web cmdlet 。

在更新执行策略时,你将有两个主要决策。

执行策略类型:

  • Restricted - 不能在系统上执行本地,远程或者下载的脚本。
  • AllSigned - 所有运行的脚本都需要数字签名。
  • RemoteSigned - 所有远程脚本( UNC ) 或者下载的都需要签名。
  • Unrestricted - 不需要任何类型的脚本签名。

新更改的范围

  • LocalMachine - 执行策略影响计算机的所有用户。
  • CurrentUser - 执行策略只影响当前用户。
  • Process - 执行策略只影响当前的Windows PowerShell进程。

例如如果你想要改变这个策略对刚到,可能出现意外行为中的执行策略的,你有操作运行以下命令:


Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

: 为了更改执行策略时,你必须正在运行当通过为 Adminstrator 。 如果你处于常规模式,并尝试更改执行策略,你将得到以下错误:

拒绝访问注册表项'hkey_local_machinesoftwaremicrosoftpowershell1shellidsmicrosoft 。powershell'。 随着"作为管理员运行"option,要更改为默认( 归属地址) 作用域的执行策略,开始 Windows powershell.

如果你想在没有从 Internet ( 或者至少不包含UNC元数据) 下载的脚本上加强内部限制,你可以强制策略只运行签名的sripts 。 要签署你自己的脚本,你可以按照hanselman文章上关于签名PowerShell脚本的说明。

注意: 大多数人很可能会得到这个错误只要他们打开模块和名称,因为在用户个人资料的第一件事就是PS试它启动时,要做的就是执行脚本,该脚本将设置你的环境为喜欢它。

文件通常位于:


%UserProfile%My DocumentsWindowsPowerShellMicrosoft.PowerShellISE_profile.ps1

通过运行powershell变量可以找到确切的位置

 
$profile

 

如果你在配置文件中没有关心的问题,并且不想使用你的安全设置,你就可以删除它,并且你将无法找到它无法执行的任何东西。

使用``系统执行,作为follows,执行如果你在这是因为在使用运行 ruby 或者厨师 and:


`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath('mydocuments')`

命令用于获取"兑换文稿"文件夹。

-ExecutionPolicy Unrestricted 做的把戏。

我希望对其他人有帮助。

...