Set-ExecutionPolicy usando script em lote + script powershell

7

Estou trabalhando no meu dotfiles e estou querendo criar um script em lote que fará algumas configurações iniciais para mim ao mudar para um novo computador, como usar psget para instalar módulos, etc ... Eu também gostaria que fosse em frente e mude a minha ExecutionPolicy para algo utilizável.

Eu criei um arquivo em lotes que simplesmente dispara um script do powershell sob Bypass ExecutionPolicy:

powershell -ExecutionPolicy ByPass 
           -NoLogo -NoProfile -NoExit 
           -File .\set-policy.ps1

set-policy.ps1 tenta executar o powershell como administrador para alterar a Política de Execução:

Start-Process powershell -verb runas 
  -ArgumentList "-No Exit -Command { Set-ExecutionPolicy Restricted }"

Infelizmente, isso não parece fazer esse truque (saída abaixo). Não tenho certeza qual é o problema.

Set-ExecutionPolicy Restricted
PS C:\windows\system32> Get-ExecutionPolicy
RemoteSigned

Alguma dica sobre como usar um script em lote + script powershell para alterar a política de execução?

    
por Jeff Bridgman 06.07.2013 / 00:55

2 respostas

11

O problema é como você está invocando o novo processo do PowerShell; parece estar executando comandos antes que o prompt do PowerShell esteja pronto, para que eles sejam impressos no console; Eu não tenho certeza porque. De qualquer forma, aqui está a correção.

É assim que o arquivo set-policy.ps1 deve estar:

Start-Process PowerShell -ArgumentList "Set-ExecutionPolicy Restricted -Force" -Verb RunAs

Ou você pode fazer tudo do arquivo em lote em uma linha como esta:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy Restricted -Force' -Verb RunAs}"

Eu forneço um pouco mais de informações sobre como chamar scripts do PowerShell a partir de arquivos em lote e por que você gostaria de fazer isso .

    
por 18.11.2013 / 23:57
3

A maneira mais fácil de fazer isso é editar o registro. Então agora meu arquivo de lote simplesmente contém:

regedit.exe /S EnableScripts.reg

Em execução, será solicitado automaticamente ao usuário permissão / credenciais, conforme necessário. Meu arquivo EnableScripts.reg contém apenas o seguinte:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell]
"Path"="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
"ExecutionPolicy"="RemoteSigned"

A configuração do registro acima era suficiente, exceto para a execução do x86 PowerShell (na minha máquina de 64 bits). Isso exigiu definir adicionalmente as chaves de registro abaixo:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\ShellIds\Microsoft.PowerShell]
"Path"="C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
"ExecutionPolicy"="RemoteSigned"
    
por 09.07.2013 / 01:13