无法在 Windows 上使用 Ruby 2.3 加载 Powershell 配置文件

无法在 Windows 上使用 Ruby 2.3 加载 Powershell 配置文件

从 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

相关内容