После обновления с 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 ответ1

1

Вероятно, что политика выполнения была установлена для всей машины с использованием Set-ExecutionPolicy Unrestricted в обычном приглашении PowerShell. В 64-разрядной системе фактически существует две версии PowerShell: одна 64-разрядная и одна 32-разрядная. В этой ситуации при запуске PowerShell вы получите 64-битную версию. Тем не менее, похоже, что Ruby - это 32-битный процесс. Судя по присутствию SysWOW64 в сообщении об ошибке, 32-разрядная версия Ruby запускает 32-разрядную версию PowerShell, которая не выглядит так же, как 64-разрядная версия PowerShell. Запущенный Ruby PowerShell не видит измененную политику выполнения, поэтому он отказывается запускать скрипт профиля.

Чтобы устранить проблему, запустите команду установки политики из командной строки PowerShell с повышенными привилегиями. Один из них можно получить из записи «Windows PowerShell (x86)» в разделе «Пуск». Вы также можете установить политику только для своей учетной записи:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Это, кажется, работает через битности. Наконец, если вам не нужны скрипты профиля для запуска, у вас также есть возможность отключить загрузку профиля с -noprofile в powershell .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .