Comment créer des alias PowerShell permanents

143

Je veux créer un aliasun cmdletqui n'expirent pas après que je ferme la session en cours de Powershell, disons que j'ai cet alias:

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

Cela crée parfaitement l' Gotoalias, mais je veux l'utiliser même après avoir fermé la session en cours, comment puis-je y parvenir.

Remarque:

Le système d'aide PowerShell suggère que je puisse exporter les alias que je crée et les importer la prochaine fois que j'ouvrirai une nouvelle session, en fait ce n'est pas vraiment ce que je recherche, y a-t-il un moyen clair et direct de continuer à avoir un alias après créez-le à travers différentes sessions

AymenDaoudi
la source
IMO, vous feriez bien mieux de mettre des scripts dans le PATH. De cette façon, la commande sera disponible instantanément pour tous vos shells ouverts et si vous la modifiez, la modification se propagera à toutes les utilisations ultérieures sans avoir à recharger $ profile ou quelque chose.
masterxilo

Réponses:

112

MISE À JOUR - janvier 2017

Il est possible de stocker dans un profile.ps1fichier tout code PowerShell à exécuter à chaque démarrage de PowerShell. Il existe au moins 6 chemins différents où stocker le code en fonction de l'utilisateur qui doit l'exécuter. Nous ne pouvons en considérer que 2: les chemins «tous les utilisateurs» et «seulement votre utilisateur».

Donc pour répondre à votre question il vous suffit de créer un profile.ps1fichier contenant le code que vous souhaitez exécuter, c'est-à-dire

New-Alias Goto Set-Location

et enregistrez-le dans le bon chemin:

  • "$Home\Documents" (C: \ Users \ yourname \ Documents): seul votre utilisateur exécutera le code.
  • $PsHome (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0): chaque utilisateur exécutera le code.

Pour appliquer les modifications, fermez toutes les instances PowerShell ouvertes et redémarrez-les.

CONSEILS

  • Si les deux chemins contiennent un profile.ps1fichier, celui de tous les utilisateurs est exécuté en premier, puis les utilisateurs spécifiques.

  • Placez toujours le code dans le profil spécifique à l'utilisateur s'il n'est pas nécessaire d'étendre son exécution à chaque utilisateur. Vous n'avez pas besoin de droits d'administrateur pour ajouter le fichier à votre espace utilisateur (sinon vous le faites) et vous ne polluez pas l'espace des autres utilisateurs.

  • RAPPELLES TOI! Le $PsHomechemin est différent entre les instances 32 bits et 64 bits de PowerShell, vous devez donc considérer les deux environnements si vous souhaitez toujours exécuter le code de profil. Habituellement, les chemins sont C:\Windows\System32\WindowsPowerShell\v1.0pour l'environnement 64 bits et C:\Windows\SysWow64\WindowsPowerShell\v1.0pour l' environnement 32 bits.

Naigel
la source
9
aucune erreur cela n'a tout simplement pas fonctionné, je ne suis pas sûr s'il s'agit d'un problème d'autorisations. Je l'ai fait fonctionner (je devrais commenter plus tôt). J'ai dû créer le dossier \Users\{ME}\Documents\WindowsPowerShell, puis ajouter Microsoft.PowerShell_profile.ps1aucun des autres chemins ne fonctionne pour moi.
2
Selon l'article lié, l'utilisation "$HOME\Documents\WindowsPowerShell"et la dénomination Microsoft.PowerShell_profile.ps1limitent la portée aux non-ISE et à l'hôte actuel, mais ne devraient pas être une question d'autorisations (idem "$Home\Documents\profile.ps1" should apply). Peut-être que ce n'est pas vraiment le cas, je vais essayer, merci pour l'information
Naigel
2
Salut @Naigel, je dois utiliser cette approche pour le faire fonctionner: superuser.com/questions/516700/… donc la solution finale pour moi était de créer le fichier pour le profil: New-Item -path $profile -type file -forcecela a créé le dossier et le fichierDocuments\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Eagle
57
La meilleure façon d'obtenir l'emplacement du profil pourrait être d'exécuter "echo $ profile" dans votre fenêtre PowerShell.
Rahul Jha
2
N'oubliez pas de faire une sauvegarde de votre fichier profile.ps1, car Windows Creators Update semble effacer le fichier à son emplacement par défaut !!
gooleem
109

Ce n'est pas une bonne idée d'ajouter ce genre de chose directement à vos $env:WINDIRdossiers PowerShell.
La méthode recommandée est de l'ajouter à votre profil personnel:

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

Ajoutez maintenant votre alias au fichier Microsoft.PowerShell_profile.ps1 qui est maintenant ouvert:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Puis enregistrez-le et actualisez la session en cours avec:

. $profile

Remarque: juste au cas où, si vous obtenez un problème d'autorisation comme

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

Essayez la commande ci-dessous et actualisez à nouveau la session.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Chase Florell
la source
1
Excellent commentaire. Très clair, bien que mon PowerShell n'ait pas de contact.
JustinB
9
Afin de permettre l'exécution de mon script de profil, j'ai dû faire une étape supplémentaire. Exécutez Powershell en tant qu'administrateur et exécutez Set-ExecutionPolicy RemoteSigned -Scope CurrentUser. L' -Scopeoption le rend un peu plus sûr.
zombat
2
C'est une excellente méthode! Veuillez noter que la fonction elle-même devient également disponible dans le shell, vous n'avez donc pas vraiment besoin de la partie Set-Alias. Appelez simplement la fonction MyAlias. Aussi, pour transmettre des arguments, utilisez @Args, par exemplefunction gs { git status @Args }
Automatico
3
@Automatico J'aime être explicite sur le Set-Aliasparce que j'aime nommer mes méthodes en utilisant les conventions PS appropriées avec les verbes appropriés. Mais oui, si vous n'êtes pas pointilleux, vous pouvez simplement nommer votre méthode ce que vous avez l'intention d'invoquer.
Chase Florell
1
@zombat C'est exactement avec quoi je me débattais, pendant des heures. Merci, j'ai fini maintenant.
jawad mansoor le
28

2018, Windows 10

Vous pouvez créer un lien vers n'importe quel fichier ou répertoire à l'aide d'un simple script PowerShell.

Ecrire un script de raccourci de fichier

Ouvrez Windows PowerShell ISE. Dans le volet de script, écrivez:

New-Alias ${shortcutName} ${fullFileLocation}

Ensuite, dirigez-vous vers le volet de ligne de commande. Recherchez l'adresse de votre profil utilisateur PowerShell avec echo $profile. Enregistrez le script dans cette adresse.

entrez la description de l'image ici

Le script de l'adresse de profil de PowerShell s'exécutera chaque fois que vous ouvrirez PowerShell. Le raccourci doit fonctionner avec chaque nouvelle fenêtre PowerShell.

Ecrire un script de raccourci de répertoire

Cela nécessite une autre ligne dans notre script.

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

Le reste est exactement le même.

entrez la description de l'image ici

Activer les scripts PowerShell

Par défaut, les scripts PowerShell sont bloqués. Pour les activer, ouvrez les paramètres -> Mise à jour et sécurité -> Pour les développeurs. Sélectionnez le mode développeur (peut nécessiter un redémarrage). Sélection du mode développeur Windows 10.

Faites défiler jusqu'à la section PowerShell, cochez l'option «Modifier la stratégie d'exécution ...» et appliquez.

Activation des scripts PowerShell

Ben Carp
la source
2
echo $profileest une astuce géniale pour vous aider à trouver le bon emplacement pour ajouter le fichier. Merci pour la réponse complète
Pedro Martins Timóteo da Costa
19

Facile. Par exemple...

Ouvrez une fenêtre Windows PowerShell et tapez:

notepad $profile

Créez ensuite une fonction, telle que:

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

Tapez ensuite ceci sous le nom de la fonction:

Set-Alias google goSomewhereThenOpenGoogleThenDeleteSomething

Vous pouvez maintenant taper le mot «google» dans Windows PowerShell et lui faire exécuter le code dans votre fonction!

Sterling Bourne
la source
$ profile ne semble pas être une variable d'environnement par défaut dans Windows 10. Sur quoi est-il censé pointer?
wordsforthewise
@wordsforthewise - La variable automatique $ PROFILE stocke les chemins d'accès aux profils PowerShell disponibles dans la session en cours. Il est inclus dans Windows PowerShell.
Sterling Bourne le
1
C'était sans aucun doute la solution la plus simple fournie.
Phill
J'ai dû activer «Activer les scripts PowerShell» (dans une autre réponse) pour que cela fonctionne. Sérieusement super simple!
Rocky Kev le
10

Juste pour ajouter à cette liste d'emplacements possibles ...

Cela n'a pas fonctionné pour moi: \Users\{ME}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Cependant, cela a fait: \Users\{ME}\OneDrive\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Si vous n'avez pas de profil ou que vous cherchez à en créer un, exécutez la commande suivante, elle créera le dossier / les fichiers nécessaires et vous indiquera même où il réside! New-Item -path $profile -type file -force

golden_grahams
la source
5

pour créer le fichier profile1.psl, tapez la commande suivante:

nouvel-élément $ PROFILE.CurrentUserAllHosts -ItemType file -Force

pour accéder au fichier, tapez la commande suivante:

ise $ PROFILE.CurrentUserAllHosts

notez que si vous ne l'avez pas fait auparavant, vous verrez que vous ne pourrez pas exécuter le script en raison de votre stratégie d'exécution, que vous devez changer en Unrestricted de Restreint (par défaut).

pour ce faire, fermez le script, puis tapez cette commande:

Set-ExecutionPolicy -Scope CurrentUser

puis:

RemoteSigned

puis cette commande à nouveau:

ise $ PROFILE.CurrentUserAllHosts

puis enfin tapez vos alias dans le script, enregistrez-le, et ils devraient s'exécuter à chaque fois que vous exécutez PowerShell, même après le redémarrage de votre ordinateur.

Michael Sanders
la source
3
Vous voulez sans doute: Set-ExecutionPolicy RemoteSigned. N'allez pas recommander Unrestricted. Source: itprotoday.com/management-mobility/…
PhilT
2

C'est un peu sophistiqué ... mais ça marche:

Étape 1: Créez un profil 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

Étape 2: puis dans tools ~ / Documents / tools / profile.ps1:

function Do-ActualThing {
    # do actual thing
}

Set-Alias MyAlias Do-ActualThing

Étape 3:

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

Bill Moore
la source