从 Ruby 2.2 升级到 Ruby 2.3 后,powershell 调用停止工作,因为未加载 powershell 配置文件。
1)如果我打开命令提示符,它将起作用:
C:\Users\administrador>powershell.exe ls
Directory: C:\Users\administrador
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 26/06/2015 16:20 .android
d---- 24/08/2015 16:25 .gem
d-r-- 30/06/2017 11:27 Contacts
d-r-- 06/07/2017 16:53 Desktop
d-r-- 30/06/2017 11:27 Documents
d-r-- 30/06/2017 11:27 Downloads
d-r-- 30/06/2017 11:27 Favorites
d-r-- 30/06/2017 11:27 Links
d-r-- 30/06/2017 11:27 Music
d-r-- 30/06/2017 11:27 Pictures
d-r-- 30/06/2017 11:27 Saved Games
d-r-- 30/06/2017 11:27 Searches
d-r-- 30/06/2017 11:27 Videos
-a--- 22/01/2015 11:18 1796 volshext.log
2) 但是如果使用 Ruby,它不起作用。我以管理员身份执行命令提示符:
irb(main):002:0> system("powershell ls")
File C:\Windows\SysWOW64\WindowsPowerShell\v1.0\profile.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:2
+ . <<<< 'C:\Windows\SysWOW64\WindowsPowerShell\v1.0\profile.ps1'
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
File C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:2
+ . <<<< 'C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1'
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
File C:\Users\administrador\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.
At line:1 char:2
+ . <<<< 'C:\Users\administrador\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1'
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Directory: C:\Users\administrador
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 26/06/2015 16:20 .android
d---- 24/08/2015 16:25 .gem
d-r-- 30/06/2017 11:27 Contacts
d-r-- 06/07/2017 16:53 Desktop
d-r-- 30/06/2017 11:27 Documents
d-r-- 30/06/2017 11:27 Downloads
d-r-- 30/06/2017 11:27 Favorites
d-r-- 30/06/2017 11:27 Links
d-r-- 30/06/2017 11:27 Music
d-r-- 30/06/2017 11:27 Pictures
d-r-- 30/06/2017 11:27 Saved Games
d-r-- 30/06/2017 11:27 Searches
d-r-- 30/06/2017 11:27 Videos
-a--- 22/01/2015 11:18 1796 volshext.log
=> true
什么可能出错?
答案1
执行策略很可能是Set-ExecutionPolicy Unrestricted
在常规 PowerShell 提示符中为整个机器设置的。在 64 位系统上,实际上有两个版本的 PowerShell:一个 64 位,一个 32 位。在这种情况下,正常运行 PowerShell 将获得 64 位版本。不过,Ruby 似乎是一个 32 位进程。根据SysWOW64
错误消息中的 来判断,32 位 Ruby 正在启动 32 位 PowerShell,它无法获得与 64 位 PowerShell 相同的系统视图。Ruby 启动的 PowerShell 看不到更改的执行策略,因此它拒绝运行配置文件脚本。
要解决此问题,请从提升的 32 位 PowerShell 提示符运行策略设置命令。您可以从“开始”中的“Windows PowerShell (x86)”条目中获取其中一个。您还可以仅为您的用户帐户设置策略:
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
这似乎适用于所有位数。最后,如果您不需要运行配置文件脚本,您还可以选择通过切换-noprofile
到 来禁用配置文件加载powershell
。