Не удается загрузить профиль Powershell с использованием Ruby 2.3 в Windows

439
brgsousa

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

Что может быть не так?

0

1 ответ на вопрос

1
Ben N

Скорее всего, политика выполнения была установлена ​​для всей машины с использованием 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.