É hora do projeto de fim de semana novamente e hoje você aprenderá como construir um menu leve de formulário PowerShell na bandeja do sistema, onde você pode iniciar rapidamente e facilmente seus scripts PowerShell mais desejados. Você pode ver abaixo o resultado final.

Neste artigo, você aprenderá a construir seu próprio menu GUI do PowerShell dividindo o processo passo a passo.
Requisitos de Ambiente e Conhecimento
Antes de começar, certifique-se de atender aos seguintes requisitos mínimos:
- Windows 7 ou posterior
- Windows PowerShell 3 ou posterior – A versão mais recente do .NET Core 3.0 com o PowerShell 7 preview pode funcionar no Windows devido ao suporte adicionado recentemente para WPF e WinForm, mas não foi testado.
- .NET Framework 4.5 ou posterior
- A familiarity with Windows Forms (WinForms) You can, however, due this with WPF too though.
Para este projeto, a boa notícia é que você realmente não precisará depender do Visual Studio, PoshGUI ou qualquer outra ferramenta de desenvolvimento de IU, pois os componentes principais em que este projeto dependerá são os seguintes:
- NotifyIcon – Isso representará nosso ícone personalizável na bandeja do sistema para o usuário interagir.
- Menu de Contexto – Recipiente para quando o usuário clica com o botão direito no ícone da bandeja.
- Item do Menu – Objetos individuais para cada opção dentro do menu de clique com o botão direito.
Abra o seu editor de script PowerShell favorito e vamos começar!
Para este projeto, você vai construir três funções: duas funções para mostrar/ocultar o console e proporcionar uma experiência mais limpa ao usuário, e uma para adicionar itens ao menu da bandeja do sistema. Essas funções servirão como uma base para uso futuro, facilitando sua vida, como você aprenderá um pouco mais tarde neste artigo.
Mostrar/Ocultar Janela do Console
A menos que esteja oculto, quando você inicia um script PowerShell, a conhecida janela de console do PowerShell aparecerá. Como os itens de menu no formulário PowerShell que você criará irão iniciar scripts, você deve garantir que o console não apareça. Você só quer que ele execute.
Ao executar um script, você pode alternar a exibição da janela do console PowerShell ou não usando um pouco de .NET.
Primeiro adicione o tipo Window .NET na sessão atual. Para fazer isso, você usará algum C# como verá abaixo. Os dois métodos que você precisa carregar no contexto são GetConsoleWindow e ShowWindow. Ao carregar esses DLLs na memória, você está expondo certas partes da API, o que permite usá-las no contexto do seu script do PowerShell:
Crie duas funções usando as DLLs carregadas acima usando o método GetConsoleWindow()
e ShowWindow()
como mostrado abaixo.
Com essas duas funções, você criou uma maneira de mostrar ou ocultar a janela do console quando quiser.
Nota: Se você deseja ver a saída dos scripts executados via menu, pode usar transcrições do PowerShell ou outras características de registro baseadas em texto. Isso permite manter o controle em vez de apenas executar a sessão do PowerShell com o parâmetro WindowStyle para ocultar.
Agora comece a construir o código do script chamando Start-HideConsole
. Quando o script do formulário do PowerShell executar com base no menu, isso garantirá que a janela do console do PowerShell não apareça.
Criar Opções de Menu
Agora é hora de criar as opções de menu. Garantindo que você possa facilmente criar novas opções posteriormente, crie outra função desta vez chamada New-MenuItem
. Quando você chama esta função, ela criará um novo objeto MenuItem .NET que você pode adicionar ao menu posteriormente.
Cada opção de menu iniciará outro script ou sairá do lançador. Para acomodar essa funcionalidade, a função New-MenuItem
tem três parâmetros:
Texto
– O rótulo que o usuário clicaráCaminhoDoMeuScript
– O caminho para o script do PowerShell a ser executadoSairApenas
– A opção de sair do lançador.
Adicione o trecho de função abaixo ao script do menu.
Continuando a construir a função New-MenuItem
, crie um objeto MenuItem atribuindo-o a uma variável.
Em seguida, atribua o rótulo de texto ao item de menu.
Agora adicione uma propriedade personalizada ao MenuItem chamada CaminhoDoMeuScript
. Este caminho será chamado quando o item for clicado no menu.
Adicione um evento de clique ao MenuItem que inicia o script desejado. Start-Process fornece uma maneira limpa de fazer isso dentro de um bloco try/catch para garantir que quaisquer erros ao iniciar o script (como o PowerShell não estar disponível ou o script não existir no caminho fornecido) caiam no bloco catch.
Adicione a lógica restante para fornecer uma condição de saída para o iniciador, seguida pelo retorno do seu novo MenuItem para ser atribuído a outra variável em tempo de execução.
Agora você deve ter a função New-MenuItem
criada! A função final deve se parecer com isto:
Teste a função New-MenuItem
copiando e colando o código acima no seu console PowerShell e executando a função fornecendo alguns valores de parâmetros falsos. Você verá que um objeto MenuItem .NET é retornado.
Criando um Formulário de Inicialização
Quer mais dicas como esta? Confira meu blog pessoal PowerShell em: https://nkasco.com/FriendsOfATA
Agora que você pode criar facilmente novos itens de menu, é hora de criar um iniciador de bandeja do sistema que irá exibir o menu.
Crie um objeto de formulário básico para adicionar componentes. Isso não precisa ser nada sofisticado, pois será oculto para o usuário final e manterá o console em execução em segundo plano também.
A seguir, crie o ícone que aparecerá na bandeja do sistema. Abaixo, escolhi usar o ícone do PowerShell. Durante a execução, o código abaixo cria um ícone real na bandeja do sistema. Este ícone pode ser personalizado conforme desejado, configurando a variável SystrayIcon
para o ícone desejado.
Consulte a documentação para a classe System.Drawing.Icon para ver outros métodos nos quais você pode carregar um ícone na memória.
Ao executar o script, você deverá ver um ícone do PowerShell aparecer na bandeja do sistema, como mostrado abaixo.
Agora, crie um contêiner para seus itens de menu com um novo objeto ContextMenu e crie todos os itens do menu. Para este exemplo, o menu terá dois scripts para executar e uma opção de saída.
Em seguida, adicione todos os itens de menu recém-criados ao menu de contexto. Isso garantirá que cada opção de menu apareça no menu de contexto do formulário.
Mostre o Formulário do Launcher
Agora que o formulário está completo, a última coisa a fazer é mostrá-lo, garantindo que a janela do console do PowerShell não apareça. Faça isso usando Start-HideConsole
, exibindo o formulário do lançador e mostrando novamente o console com Start-ShowConsole
para evitar um processo powershell.exe travado.
Quer mais dicas como esta? Confira o meu blog pessoal de PowerShell em: https://nkasco.com/FriendsOfATA
O código completo na sua totalidade pode ser encontrado aqui: https://github.com/nkasco/PSSystrayLauncher
Suas Conclusões
Parabéns, você terminou este projeto! Neste artigo, você aprendeu:
- Como expor componentes da API do Windows.
- Como trabalhar com menus de contexto via WinForms e adicionar itens de menu subsequentes.
- Como criar um ícone na bandeja do sistema em PowerShell.
Este projeto deve fornecer a você entendimento e experiência suficientes para criar seu próprio menu de bandeja do sistema para seus scripts do PowerShell!