Eu estou trabalhando no meu dotfiles e estou querendo criar um script em lotes que vai fazer alguma configuração inicial para mim quando se muda 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 PowerShell sob o Bypass
ExecutionPolicy:
powershell -ExecutionPolicy ByPass
-NoLogo -NoProfile -NoExit
-File .\set-policy.ps1
set-policy.ps1
tenta executar o powershell como administrador para alterar a ExecutionPolicy:
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 de lote + script powershell para alterar a política de execução?
windows-7
batch
powershell
Jeff Bridgman
fonte
fonte
-verb runas
que irá abrir o prompt do uac e lançar o powershell como administrador.Respostas:
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 aparecer:
Ou você pode fazer a coisa toda a partir do arquivo de lote em uma linha como esta:
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 no meu post aqui .
fonte
A maneira mais fácil de fazer isso foi editar o registro. Então agora meu arquivo de lote simplesmente contém:
A execução que solicitará automaticamente ao usuário permissões / credenciais, conforme necessário. Minhas
EnableScripts.reg
arquivo contém apenas o seguinte: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:
fonte