Pergunta

Tenho algumas linhas de código do PowerShell que gostaria de usar como script automatizado.A maneira que eu gostaria que funcionasse é poder chamá-lo usando uma das seguintes opções:

  1. Uma linha de comando que abre o PowerShell, executa o script e fecha o PowerShell (isso seria usado para uma rotina de construção global)
  2. Um arquivo no qual posso clicar duas vezes para executar o procedimento acima (eu usaria esse método ao testar manualmente os componentes do meu processo de construção)

Tenho examinado a documentação on-line do PowerShell e, embora encontre muitos scripts, não consegui encontrar instruções sobre como fazer o que preciso.Obrigado pela ajuda.

Foi útil?

Solução

Salve seu script como um arquivo .ps1 e execute-o usando powershell.exe, assim:

powershell.exe .\foo.ps1

Certifique-se de especificar o caminho completo para o script e de definir o nível de política de execução como pelo menos "RemoteSigned" para que scripts locais não assinados possam ser executados.

Outras dicas

De http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

Se você estiver disposto a manchar seu lindo script do PowerShell com um pouco de CMD, poderá usar um truque poliglota do PowerShell-CMD.Salve seu script do PowerShell como um arquivo .CMD e coloque esta linha no topo:

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

Se precisar apoiar argumentos citados, existe uma versão mais longa, que também permite comentários.(observe o truque incomum de comentários do CMD duplo @).

@@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
@@:: Any non-PowerShell content must be preceeded by "@@"
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF

Fonte pela resposta de Matt.

Posso executá-lo clicando duas vezes em um arquivo criando um arquivo em lote com o seguinte:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File

Execute o script automaticamente a partir de outro script (por exemplo,Arquivo em lote)

Como sugeriu Matt Hamilton, basta criar seu script PowerShell .ps1 e chamá-lo usando:

PowerShell C:\Path\To\YourPowerShellScript.ps1

ou se o diretório de trabalho do seu arquivo em lote for o mesmo diretório em que o script do PowerShell está, você poderá usar um caminho relativo:

PowerShell .\YourPowerShellScript.ps1

E antes que isso funcione você precisará definir a Política de Execução do PC, o que mostro abaixo.


Execute o script manualmente Método 1

Você pode veja minha postagem no blog para mais informações, mas essencialmente crie seu arquivo de script PowerShell .ps1 para fazer o que quiser e, em seguida, crie um arquivo em lote .cmd no mesmo diretório e use o seguinte para o conteúdo do arquivo:

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

Substituindo MeuPowerShellScript.ps1 na terceira linha com o nome do arquivo do seu script do PowerShell.

Isso permitirá que você simplesmente clique duas vezes no arquivo em lote para executar o script do PowerShell e evitará a necessidade de alterar a política de execução do PowerShell.

Minha postagem no blog também mostra como executar o script do PowerShell como administrador, se isso for algo que você precisa fazer.


Execute o script manualmente, método 2

Como alternativa, se não quiser criar um arquivo em lote para cada um dos scripts do PowerShell, você poderá alterar o comportamento padrão do script do PowerShell de Editar para Executar, permitindo clicar duas vezes nos arquivos .ps1 para executá-los.

Há uma configuração de registro adicional que você desejará modificar para poder executar scripts cujo caminho de arquivo contenha espaços.Eu mostro como fazer essas duas coisas nesta postagem do blog.

Com esse método, entretanto, primeiro você precisará definir sua política de execução para permitir a execução de scripts.Você só precisa fazer isso uma vez por PC e pode ser feito executando esta linha em um prompt de comando do PowerShell.

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned -Force é o comando que realmente altera a política de execução;isso define para Assinado remotamente, então você pode mudar isso para outra coisa, se precisar.Além disso, esta linha executará automaticamente o PowerShell como administrador para você, o que é necessário para alterar a política de execução.

você pode usar este comando:powershell.exe -argumento c:\scriptPath\Script.ps1

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top