Como criar aliases permanentes do PowerShell

141

Quero criar um aliasde um cmdletque não expire após o encerramento da sessão atual do Powershell, digamos que tenho esse alias:

C:\Users\Aymen> New-Alias Goto Set-Location

Isso cria perfeitamente o Gotoalias, mas eu quero usá-lo mesmo depois de fechar a sessão atual, como posso conseguir isso.

Nota:

O sistema de Ajuda do PowerShell sugere que eu posso exportar os aliases criados e importá-los na próxima vez em que abrir uma nova sessão. Na verdade, não é isso que estou procurando, existe uma maneira clara e direta de manter um alias depois que eu criá-lo através de diferentes sessões

AymenDaoudi
fonte
Na IMO, é muito melhor colocar scripts no PATH. Dessa forma, o comando estará disponível instantaneamente para todos os seus shells abertos e, se você o alterar, a mudança será propagada para todos os usos subsequentes sem precisar recarregar o $ profile ou algo assim.
Masterdilo #

Respostas:

112

ATUALIZADO - Jan de 2017

É possível armazenar em um profile.ps1arquivo qualquer código do PowerShell a ser executado sempre que o PowerShell for iniciado. Existem pelo menos 6 caminhos diferentes onde armazenar o código, dependendo de qual usuário deve executá-lo. Podemos considerar apenas dois deles: os caminhos "todos os usuários" e "apenas o seu usuário".

Portanto, para responder sua pergunta, você só precisa criar um profile.ps1arquivo contendo o código que deseja executar, ou seja,

New-Alias Goto Set-Location

e salve-o no caminho correto:

  • "$Home\Documents" (C: \ Users \ seunome \ Documents): somente seu usuário executará o código.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): todo usuário executará o código.

Para aplicar as alterações, feche todas as instâncias do PowerShell abertas e reinicie-as.

DICAS

  • Se os dois caminhos contiverem um profile.ps1arquivo, todos os usuários serão executados primeiro, e os usuários serão específicos.

  • Sempre coloque o código no perfil específico do usuário se não houver necessidade de estender sua execução a cada usuário. Você não precisa de direitos de administrador para adicionar o arquivo ao espaço do usuário (caso contrário, precisa) e não polui o espaço de outros usuários.

  • LEMBRAR! O $PsHomecaminho é diferente entre as instâncias de 32 bits e 64 bits do PowerShell, portanto, você deve considerar os dois ambientes se quiser sempre executar o código do perfil. Geralmente, os caminhos são C:\Windows\System32\WindowsPowerShell\v1.0para o ambiente de 64 bits e C:\Windows\SysWow64\WindowsPowerShell\v1.0para o de 32 bits.

Naigel
fonte
9
nenhum erro, ele simplesmente não funcionou, não tenho certeza se este é um problema de permissões. Na verdade, eu consegui que funcionasse (eu deveria comentar anteriormente). Eu tive que criar a pasta \Users\{ME}\Documents\WindowsPowerShelle adicionar Microsoft.PowerShell_profile.ps1não dos outros caminhos funciona para mim.
2
De acordo com o artigo vinculado, o uso "$HOME\Documents\WindowsPowerShell"e a nomeação Microsoft.PowerShell_profile.ps1restringem o escopo ao ISE e ao host atual, mas não devem ser uma questão de permissões (o mesmo "$Home\Documents\profile.ps1" should apply). Talvez não seja realmente assim, vou dar-lhe uma tentativa, obrigado pela informação
Naigel
2
Oi @Naigel, devo usar essa abordagem para fazê-lo funcionar: superuser.com/questions/516700/... para que a solução final para mim foi criar o arquivo de perfil: New-Item -path $profile -type file -forceque criou a pasta e arquivoDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Águia
57
A melhor maneira de obter a localização do perfil pode ser executando "echo $ profile" na janela do seu PowerShell.
Rahul Jha #
2
Lembre-se de fazer um backup do seu arquivo profile.ps1, pois o Windows Creators Update parece limpar o arquivo no local padrão !!
Gooleem #
109

Não é uma boa ideia adicionar esse tipo de coisa diretamente às $env:WINDIRpastas do PowerShell.
A maneira recomendada é adicioná-lo ao seu perfil pessoal:

cd $env:USERPROFILE\Documents
md WindowsPowerShell -ErrorAction SilentlyContinue
cd WindowsPowerShell
New-Item Microsoft.PowerShell_profile.ps1 -ItemType "file" -ErrorAction SilentlyContinue
powershell_ise.exe .\Microsoft.PowerShell_profile.ps1

Agora adicione seu alias ao arquivo Microsoft.PowerShell_profile.ps1 que agora está aberto:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Em seguida, salve-o e atualize a sessão atual com:

. $profile

Nota: Apenas no caso, se você receber um problema de permissão como

CategoryInfo: SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId: UnauthorizedAccess

Tente o comando abaixo e atualize a sessão novamente.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Chase Florell
fonte
1
Ótimo comentário. Muito claro, embora meu PowerShell não tenha toque.
justinb
9
Para permitir a execução do meu script de perfil, tive que fazer uma etapa extra. Execute o Powershell como administrador e execute Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. A -Scopeopção o torna um pouco mais seguro.
zombat 25/10
2
Este é um ótimo método! Por favor, não deixe que a função em si também esteja disponível no shell, para que você realmente não precise da parte Set-Alias. Basta chamar a função MyAlias. Além disso, para passar argumentos, use @Args, por exemplo,function gs { git status @Args }
Automatico
3
@ Automático Eu gosto de ser explícito sobre o Set-Aliasporque eu gosto de nomear meus métodos usando as convenções PS apropriadas com os verbos apropriados. Mas sim, se você não for exigente, basta nomear seu método como deseja invocar.
Chase Florell 22/02/19
1
@ zombat Era exatamente isso que eu estava lutando por horas. Obrigado, eu terminei agora.
jawad mansoor 03/02
28

2018, Windows 10

Você pode vincular a qualquer arquivo ou diretório com a ajuda de um script simples do PowerShell.

Escrevendo um script de atalho de arquivo

Abra o Windows PowerShell ISE. No painel de script, escreva:

New-Alias ${shortcutName} ${fullFileLocation}

Em seguida, vá para o painel da linha de comandos. Encontre o seu endereço de perfil de usuário do PowerShell com echo $profile. Salve o script neste endereço.

insira a descrição da imagem aqui

O script no endereço do perfil do PowerShell será executado sempre que você abrir o PowerShell. O atalho deve funcionar com todas as novas janelas do PowerShell.

Escrevendo um script de atalho de diretório

Requer outra linha em nosso script.

function ${nameOfFunction} {set-location ${directory_location}}
New-Alias ${shortcut} ${nameOfFunction} 

O resto é exatamente o mesmo.

insira a descrição da imagem aqui

Habilitar scripts do PowerShell

Por padrão, os scripts do PowerShell estão bloqueados. Para habilitá-los, abra as configurações -> Atualização e segurança -> Para desenvolvedores. Selecione Modo de desenvolvedor (pode exigir reinicialização). Selecionando o Modo de Desenvolvedor Windows 10.

Role para baixo até a seção PowerShell, marque a opção "Alterar política de execução ..." e aplique.

Habilitando scripts do PowerShell

Ben Carp
fonte
2
echo $profileé uma dica incrível para ajudar a encontrar o local correto para adicionar o arquivo. Obrigado pela resposta abrangente
Pedro Martins Timóteo da Costa
19

Simples. Por exemplo...

Abra uma janela do Windows PowerShell e digite:

notepad $profile

Em seguida, crie uma função, como:

function goSomewhereThenOpenGoogleThenDeleteSomething {
    cd C:\Users\
    Start-Process -FilePath "http://www.google.com"
    rm fileName.txt
}

Em seguida, digite isso sob o nome da função:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Agora você pode digitar a palavra "google" no Windows PowerShell e executar o código em sua função!

Sterling Bourne
fonte
$ profile não parece ser uma variável de ambiente padrão no Windows 10. O que ele deve apontar?
wordsforthewise
@wordsforthewise - A variável automática $ PROFILE armazena os caminhos para os perfis do PowerShell disponíveis na sessão atual. Está incluído no Windows PowerShell.
Sterling Bourne
1
Esta não foi a solução mais simples fornecida.
Phill
Eu tive que habilitar 'Habilitar scripts do PowerShell' (em outra resposta) para que isso funcionasse. Sério super simples!
Rocky Kev
10

Apenas para adicionar a esta lista de locais possíveis ...

Isso não funcionou para mim: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

No entanto, isso fez: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Se você não possui um perfil ou deseja configurá-lo, execute o seguinte comando: ele criará a pasta / arquivos necessários e até dirá onde ele mora! New-Item -path $profile -type file -force

golden_grahams
fonte
5

para criar o arquivo profile1.psl, digite o seguinte comando:

new-item $ PROFILE.CurrentUserAllHosts -ItemType arquivo -Force

para acessar o arquivo, digite o próximo comando:

ise $ PROFILE.CurrentUserAllHosts

note que se você não tiver feito isso antes, verá que não poderá executar o script devido à sua política de execução, que precisa mudar para Irrestrito de Restrito (padrão).

para fazer isso, feche o script e digite este comando:

Set-ExecutionPolicy -Scope CurrentUser

então:

RemoteSigned

então este comando novamente:

ise $ PROFILE.CurrentUserAllHosts

finalmente, digite seus aliases no script, salve-os e eles deverão ser executados toda vez que você executar o PowerShell, mesmo após reiniciar o computador.

Michael Sanders
fonte
3
Você provavelmente quer: Set-ExecutionPolicy RemoteSigned. Não recomende Unrestricted. Fonte: itprotoday.com/management-mobility/…
PhilT
2

Isso é um pouco chique ... mas funciona:

Etapa 1: Crie um perfil do PowerShell:

FILE: install_profile.ps1
# THIS SCRIPT BLOWS AWAY YOUR DEFAULT POWERSHELL PROFILE SCRIPT
#   AND INSTALLS A POINTER TO A GLOBAL POWERSHELL PROFILE

$ErrorActionPreference = "Stop"

function print ([string]$msg)
{
    Write-Host -ForegroundColor Green $msg
}

print ""

# User's Powershell Profile
$psdir  = "$env:USERPROFILE\Documents\WindowsPowerShell"
$psfile = $psdir + "\Microsoft.PowerShell_profile.ps1"

print "Creating Directory: $psdir"
md $psdir -ErrorAction SilentlyContinue | out-null

# this is your auto-generated powershell profile to be installed
$content = @(
    "",
    ". ~/Documents/tools/profile.ps1",
    ""
)

print "Creating File: $psfile"
[System.IO.File]::WriteAllLines($psfile, $content)

print ""

# Make sure Powershell profile is readable
Set-ExecutionPolicy -Scope CurrentUser Unrestricted

Etapa 2: depois em tools ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Etapa 3:

$ Set-ExecutionPolicy -Scope CurrentUser irrestrito $. ./install_profile.ps1

Bill Moore
fonte