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


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.


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

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


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!


$ 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


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.