Como é possível executar um script do PowerShell sem exibir uma janela ou qualquer outro sinal para o usuário?
Em outras palavras, o script deve ser executado silenciosamente em segundo plano, sem nenhum sinal para o usuário.
Crédito extra por uma resposta que não usa componentes de terceiros :)
windows
powershell
scripting
batch-file
silent
Thomas Bratt
fonte
fonte
Respostas:
Você pode executá-lo assim (mas isso mostra uma janela por um tempo):
Ou você usa um arquivo auxiliar que eu criei para evitar a janela chamada PsRun.exe que faz exatamente isso. Você pode baixar o arquivo de origem e exe. Executar tarefas agendadas com a GUI do WinForm no PowerShell . Eu o uso para tarefas agendadas.
Editado: como Marco notou, este parâmetro -windowstyle está disponível apenas para V2.
fonte
-WindowStyle Hidden
se a tarefa estiver definidaRun whether user is logged on or not
na guia Geral, na seção "Opções de segurança".Eu estava tendo esse mesmo problema. Descobri se você acessa a Tarefa no Agendador de Tarefas que está executando o powershell.exe script , poderá clicar em " Executar se o usuário estiver conectado ou não " e isso nunca mostrará a janela do PowerShell quando a tarefa for executada.
fonte
Você pode usar as extensões da comunidade do PowerShell e fazer o seguinte:
Você também pode fazer isso com o VBScript:
http://blog.sapien.com/index.php/2006/12/26/more-fun-with-scheduled-powershell/Agendar tarefas ocultas do PowerShell (arquivo da Internet)
Mais diversão com o PowerShell agendado (Internet Archive)
(Através deste tópico do fórum .)
fonte
Aqui está uma abordagem que não requer argumentos de linha de comando ou um iniciador separado. Não é completamente invisível porque uma janela aparece momentaneamente na inicialização. Mas então desaparece rapidamente. Onde está tudo bem, acho que é a abordagem mais fácil se você deseja iniciar seu script clicando duas vezes no explorer ou através de um atalho do menu Iniciar (incluindo, é claro, o submenu Inicialização). E eu gosto que isso faz parte do código do próprio script, não algo externo.
Coloque isso na frente do seu script:
fonte
Aqui está uma frase:
Embora seja possível exibir uma janela muito brevemente, isso deve ser uma ocorrência rara.
fonte
Eu estava tendo esse problema ao executar a partir do c #, no Windows 7, o serviço "Detecção de serviços interativos" estava aparecendo ao executar uma janela oculta do PowerShell como a conta SYSTEM.
O uso do parâmetro "CreateNoWindow" impediu que o serviço ISD aparecesse como aviso.
fonte
Acho que a melhor maneira de ocultar a tela do console do PowerShell quando você estiver executando scripts em segundo plano é esse código (" Bluecakes resposta " ").
Eu adiciono esse código no início de todos os meus scripts do PowerShell que preciso executar em segundo plano.
fonte
ps1 oculto no Agendador de tarefas e atalho também
fonte
Eu criei uma pequena ferramenta passando a chamada para qualquer ferramenta do console que você deseja iniciar sem janelas no arquivo original:
https://github.com/Vittel/RunHiddenConsole
Após a compilação, apenas renomeie o executável como "<targetExecutableName> w.exe" (adicione um "w") e coloque-o ao lado do executável original. Você pode chamar o eG powershellw.exe com os parâmetros usuais e ele não abrirá uma janela.
Se alguém tiver uma idéia de como verificar se o processo criado está aguardando entrada, será um prazer incluir sua solução :)
fonte
MessageBox
sem nenhum flash da janela na inicialização (exigindo um EXE compilado como um Winexe, não um aplicativo de console e exigindo que o Agendador de tarefas seja definido como "Executar apenas quando o usuário estiver conectado em "para que as caixas de diálogo sejam exibidas na sessão atual da área de trabalho.) Obrigado por implementar isso, o powershellw.exe está na minha lista de desejos há anos!Aqui está uma solução funcional no Windows 10 que não inclui nenhum componente de terceiros. Ele funciona envolvendo o script do PowerShell no VBScript.
Etapa 1: precisamos alterar alguns recursos do Windows para permitir que o VBScript execute o PowerShell e abra arquivos .ps1 com o PowerShell por padrão.
-vá para executar e digite "regedit". Clique em ok e depois permita que ele seja executado.
- cole esse caminho "HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell" e pressione enter.
Agora, abra a entrada à direita e altere o valor para 0.
- abra o PowerShell como administrador e digite "Set-ExecutionPolicy -ExecutionPolicy RemoteSigned", pressione enter e confirme a alteração com "y" e, em seguida, insira.
Etapa 2: Agora podemos começar a agrupar nosso script.
-salve seu script do Powershell como um arquivo .ps1.
-crie um novo documento de texto e cole este script.
Agora, altere o caminho do arquivo para o local do script .ps1 e salve o documento de texto.
-Agora clique com o botão direito do mouse no arquivo e vá para renomear. Em seguida, altere a extensão do nome do arquivo para .vbs, pressione enter e clique em ok.
FEITO! Se você agora abrir o arquivo .vbs, não verá uma janela do console enquanto o script estiver sendo executado em segundo plano.
certifique-se de votar se isso funcionou para você!
fonte
Aqui está uma demonstração divertida de controlar os vários estados do console, incluindo minimizar e ocultar.
fonte