Comando “complexo” de início rápido de dentro do PowerShell
É possível executar comandos "complexos" do PowerShell de dentro do PowerShell usando um alias?
Para dar um exemplo, gostaria de substituir o comando Get-VpnConnection -name "VPNname"por meio de um comando de uma palavra (não reservado), por exemplo, por vpnmeio de um alias? Infelizmente set-Alias vpn "Get-VpnConnection -name VPNname"não funciona, nem funciona set-Alias vpn Get-VpnConnection -name "VPNname"(observe a posição diferente da primeira aspa).
Até agora, minha "solução alternativa" é salvar o comando como um arquivo de script no "diretório de inicialização" do PowerShells (no meu caso C:\Users\username) e executar .\vpn.ps1por meio de um alias. Eu crio o alias usando set-Alias vpn ".\script_vpncheck.ps1". Existe uma maneira direta de fazer isso (sem criar um arquivo de script)?
Pergunta de acompanhamento: Caso isso não seja possível, gostaria de inicializar os aliases usando um arquivo de script, por exemplo, via .\script.ps1(Observação: não preciso armazená-los permanentemente). Infelizmente, isso não funciona. O arquivo parece ter sido executado, mas os aliases não funcionam. Alguma ideia do porquê?
Respostas
Basta armazenar o alias no perfil
- Abra o perfil do PowerShell executando
notepad $PROFILE(ou use qualquer editor favorito seu) - Digite os comandos que deseja executar nesse arquivo e salve (por exemplo
Set-Alias) - Reinicie o PowerShell ou forneça o perfil recém-atualizado executando
. $PROFILE
O perfil é exatamente como .bashrcno bash, que será executado quando o shell for iniciado. Além de apelidos, você também pode escrever funções para coisas mais complexas. Eles estarão disponíveis após o PowerShell iniciar
function vpn($url) { Get-VpnConnection -name $url }
Set-Alias -Name vpn -Value Get-VpnConnection
Você não pode definir um apelido para comandos com argumentos, então você deve criar uma função nesse caso
O motivo pelo qual seu arquivo ps1 não funciona é porque ele é executado no subshell e, quando o subshell é fechado, tudo será limpo, incluindo os novos aliases. Você deve originar o script usando o operador dot source .(semelhante ao .bash) para executá-lo no shell atual
. .\script.ps1
Mas em vez de buscar isso toda vez que você quiser o alias, basta fazer isso permanentemente no perfil como acima
Os aliases não se destinam a receber parâmetros. Do about_aliasestópico de ajuda:
NOMES ALTERNATIVOS PARA COMANDOS COM PARÂMETROS
Você pode atribuir um alias a um cmdlet, script, função ou arquivo executável. Você não pode atribuir um alias a um comando e seus parâmetros. Por exemplo, você pode atribuir um alias ao cmdlet Get-Eventlog, mas não pode atribuir um alias ao comando Get-Eventlog -LogName System.
Você pode criar uma função que inclua o comando. Para criar uma função, digite a palavra "função" seguida de um nome para a função. Digite o comando e coloque-o entre colchetes ({}).
Por exemplo, o comando a seguir cria a função syslog. Esta função representa o comando Get-Eventlog -LogName System:
function Get-SystemEventlog {Get-Eventlog -LogName System} Set-Alias -Name syslog -Value Get-SystemEventlogAgora você pode digitar "syslog" em vez do comando. E você pode criar aliases para a nova função.
Mas você não precisa de um arquivo de script separado. Você pode definir uma função simples e adicioná-la ao seu perfil com o seguinte código:
'Function vpn { Get-VpnConnection -name VPNname }' | Add-Content $PROFILE
O comando vpnestará disponível em todas as sessões do PowerShell daquele ponto em diante.