Não é possível carregar o perfil do Powershell usando o Ruby 2.3 no Windows

0

Após a atualização do Ruby 2.2 para o Ruby 2.3, as chamadas do powershell pararam de funcionar porque os perfis do powershell não estão carregados.

1) Se eu abrir um prompt de comando, ele funciona:

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) Mas se usar o Ruby, não funciona. Estou executando o prompt de comando como administrador:

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

O que pode estar errado?

    
por brgsousa 07.08.2017 / 20:25

1 resposta

1

É provável que a política de execução tenha sido definida para a máquina inteira usando Set-ExecutionPolicy Unrestricted em um prompt normal do PowerShell. Em um sistema de 64 bits, existem duas versões do PowerShell: uma de 64 bits e outra de 32 bits. Nessa situação, executar o PowerShell normalmente fornecerá a versão de 64 bits. Parece, no entanto, que o Ruby é um processo de 32 bits. A julgar pela presença de SysWOW64 na mensagem de erro, o Ruby de 32 bits está lançando o PowerShell de 32 bits, que não obtém a mesma exibição do sistema que o PowerShell de 64 bits. O PowerShell lançado em Ruby não vê a política de execução alterada, por isso se recusa a executar o script de perfil.

Para corrigir o problema, execute o comando de definição de política a partir de um prompt elevado do PowerShell de 32 bits. Você pode obter um desses da entrada "Windows PowerShell (x86)" em Iniciar. Você também pode definir a política apenas para sua conta de usuário:

Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Isso parece funcionar em bitnesses. Por fim, se você não precisar executar os scripts de perfil, também terá a opção de desativar o carregamento do perfil com a opção -noprofile para powershell .

    
por 07.08.2017 / 21:24