Come creare alias PowerShell permanenti


142

Voglio creare un aliasdi un cmdletche non scade dopo aver chiuso la sessione corrente di Powershell, diciamo che ho questo alias:

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

Questo crea perfettamente l' Gotoalias, ma voglio usarlo anche dopo aver chiuso la sessione corrente, come posso farlo.

Nota:

Il sistema di aiuto di PowerShell suggerisce che posso esportare gli alias che creo e importarli la prossima volta che apro una nuova sessione, in realtà non è proprio quello che sto cercando, c'è un modo chiaro diretto per continuare ad avere un alias dopo che crearlo attraverso diverse sessioni


IMO, stai molto meglio inserendo gli script nel PERCORSO. In questo modo, il comando sarà immediatamente disponibile per tutte le tue shell aperte e se lo cambi, la modifica si propagherà a tutti gli usi successivi senza dover ricaricare $ profile o qualcosa del genere.
masterxilo,

Risposte:


112

AGGIORNATO - Gennaio 2017

È possibile archiviare in un profile.ps1file qualsiasi codice PowerShell da eseguire ogni volta che PowerShell si avvia. Esistono almeno 6 percorsi diversi in cui archiviare il codice a seconda dell'utente che deve eseguirlo. Possiamo considerarne solo 2: i percorsi "tutti gli utenti" e "solo il tuo utente".

Quindi per rispondere alla tua domanda devi solo creare un profile.ps1file contenente il codice che vuoi eseguire, cioè

New-Alias Goto Set-Location

e salvalo nel percorso corretto:

  • "$Home\Documents" (C: \ Users \ tuonome \ Documenti): solo il tuo utente eseguirà il codice.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): ogni utente eseguirà il codice.

Per applicare le modifiche, chiudere tutte le istanze di PowerShell aperte e riavviarle.

SUGGERIMENTI

  • Se entrambi i percorsi contengono un profile.ps1file, viene eseguito prima tutto quello utente, quindi gli utenti specifici.

  • Inserire sempre il codice nel profilo specifico dell'utente se non è necessario estenderne l'esecuzione a ciascun utente. Non hai bisogno dei diritti di amministratore per aggiungere il file al tuo spazio utente (altrimenti lo fai) e non inquini lo spazio di altri utenti.

  • RICORDA! Il $PsHomepercorso è diverso tra le istanze di PowerShell a 32 e 64 bit, quindi è necessario considerare entrambi gli ambienti se si desidera sempre eseguire il codice del profilo. Di solito i percorsi sono C:\Windows\System32\WindowsPowerShell\v1.0per l'ambiente a 64 bit e C:\Windows\SysWow64\WindowsPowerShell\v1.0per quello a 32 bit.


9
nessun errore, semplicemente non ha funzionato, non sono sicuro che si tratti di un problema di autorizzazioni. In realtà l'ho fatto funzionare (dovrei commentare prima). Ho dovuto creare la cartella \Users\{ME}\Documents\WindowsPowerShelle quindi aggiungere Microsoft.PowerShell_profile.ps1altri percorsi non funzionanti per me.

2
Secondo l'articolo collegato l'utilizzo "$HOME\Documents\WindowsPowerShell"e la denominazione Microsoft.PowerShell_profile.ps1limitano l'ambito a non ISE e all'host corrente, ma non dovrebbero essere una questione di autorizzazioni (uguale a "$Home\Documents\profile.ps1" should apply). Forse non è proprio così, lo proverò, grazie per l'informazione
Naigel

2
Ciao @Naigel, devo usare questo approccio per farlo funzionare: superuser.com/questions/516700/… quindi la soluzione finale per me è stata creare il file per il profilo: New-Item -path $profile -type file -forceche ha creato la cartella e il fileDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle

57
Il modo migliore per ottenere la posizione del profilo potrebbe essere eseguire "echo $ profile" nella finestra di PowerShell.
Rahul Jha,

2
Ricorda di fare un backup del tuo file profile.ps1, poiché Windows Creators Update sembra cancellare il file nella sua posizione predefinita !!
Gooleem,

109

Non è una buona idea aggiungere questo tipo di cose direttamente alle $env:WINDIRcartelle di PowerShell.
Il modo consigliato è aggiungerlo al tuo profilo personale:

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

Ora aggiungi il tuo alias al file Microsoft.PowerShell_profile.ps1 che è ora aperto:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Quindi salvalo e aggiorna la sessione corrente con:

. $profile

Nota: per ogni evenienza, se hai problemi di autorizzazione come

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

Prova il comando seguente e aggiorna nuovamente la sessione.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

1
Ottimo commento Molto chiaro, sebbene il mio PowerShell non abbia contatto.
Giustino,

9
Per consentire l'esecuzione del mio script del profilo, ho dovuto fare un ulteriore passaggio. Esegui Powershell come amministratore ed eseguilo Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. L' -Scopeopzione lo rende un po 'più sicuro.
Zombat,

2
Questo è un ottimo metodo! Si prega di non che la funzione stessa diventi disponibile anche nella shell, quindi non è davvero necessaria la parte Set-Alias. Basta chiamare la funzione MyAlias. Inoltre, per trasmettere argomenti, utilizzare @Args, ad esempiofunction gs { git status @Args }
Automatico il

3
@Automatico Mi piace essere esplicito sul Set-Aliasperché mi piace nominare i miei metodi usando le convenzioni PS appropriate con i verbi appropriati. Ma sì, se non sei schizzinoso, puoi semplicemente nominare il tuo metodo come vuoi invocare.
Chase Florell,

1
@zombat Questo è esattamente con cui ho lottato, per ore. Grazie, ho finito ora.
jawad mansoor,

28

2018, Windows 10

È possibile collegarsi a qualsiasi file o directory con l'aiuto di un semplice script PowerShell.

Scrivere uno script di scelta rapida di file

Apri Windows PowerShell ISE. Nel riquadro dello script scrivi:

New-Alias ${shortcutName} ${fullFileLocation}

Quindi vai al riquadro della riga di comando. Trova l'indirizzo del tuo profilo utente di PowerShell con echo $profile. Salva lo script in questo indirizzo.

inserisci qui la descrizione dell'immagine

Lo script nell'indirizzo del profilo di PowerShell verrà eseguito ogni volta che si apre PowerShell. Il collegamento dovrebbe funzionare con ogni nuova finestra di PowerShell.

Scrivere uno script di scorciatoie di directory

Richiede un'altra riga nella nostra sceneggiatura.

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

Il resto è esattamente lo stesso.

inserisci qui la descrizione dell'immagine

Abilita script di PowerShell

Per impostazione predefinita, gli script di PowerShell sono bloccati. Per abilitarli, apri le impostazioni -> Aggiornamento e sicurezza -> Per gli sviluppatori. Seleziona la modalità sviluppatore (potrebbe essere necessario riavviare). Selezione della modalità sviluppatore Windows 10.

Scorri verso il basso fino alla sezione PowerShell, seleziona l'opzione "Modifica criterio di esecuzione ..." e applica.

Abilitazione degli script di PowerShell


2
echo $profileè un fantastico suggerimento per aiutare a trovare la posizione corretta per aggiungere il file. Grazie per la risposta esaustiva
Pedro Martins Timóteo da Costa,

19

Semplice. Per esempio...

Apri una finestra di Windows PowerShell e digita:

notepad $profile

Quindi creare una funzione, ad esempio:

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

Quindi digita questo sotto il nome della funzione:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Ora puoi digitare la parola "google" in Windows PowerShell e far eseguire il codice all'interno della tua funzione!


$ profile non sembra essere una variabile d'ambiente predefinita in Windows 10. A cosa dovrebbe puntare?
parole per il

@wordsforthewise: la variabile automatica $ PROFILE memorizza i percorsi dei profili PowerShell disponibili nella sessione corrente. È incluso in Windows PowerShell.
Sterling Bourne,

1
Questa non era la soluzione più semplice fornita.
Phill

Ho dovuto abilitare "Abilita script PowerShell" (in un'altra risposta) per farlo funzionare. Davvero super semplice!
Rocky Kev,

10

Solo per aggiungere a questo elenco di possibili posizioni ...

Questo non ha funzionato per me: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Tuttavia questo ha fatto: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Se non hai un profilo o stai cercando di crearne uno, esegui il seguente comando, creerà la cartella / i file necessari e ti dirà persino dove vive! New-Item -path $profile -type file -force


5

per creare il file profile1.psl, digitare il comando seguente:

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

per accedere al file, digitare il comando successivo:

ise $ PROFILE.CurrentUserAllHosts

nota se non l'hai mai fatto prima, vedrai che non sarai in grado di eseguire lo script a causa della tua politica di esecuzione, che devi modificare in Non limitato da limitato (impostazione predefinita).

per farlo chiudi lo script e quindi digita questo comando:

Set-ExecutionPolicy -Scope CurrentUser

poi:

RemoteSigned

quindi di nuovo questo comando:

ise $ PROFILE.CurrentUserAllHosts

quindi infine digita i tuoi alias nello script, salvalo e dovrebbero essere eseguiti ogni volta che avvii PowerShell, anche dopo aver riavviato il computer.


3
Probabilmente si desidera: Set-ExecutionPolicy RemoteSigned. Non andare a raccomandare Unrestricted. Fonte: itprotoday.com/management-mobility/…
PhilT,

2

Questo è un po 'di fantasia ... ma funziona:

Passaggio 1: creare un profilo 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

Passaggio 2: quindi in tools ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Passaggio 3:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.