Commande «complexe» de démarrage rapide à partir de PowerShell

Oct 20 2020

Est-il possible d'exécuter des commandes PowerShell «complexes» à partir de PowerShell à l'aide d'un alias?

Pour vous donner un exemple, je voudrais remplacer la commande Get-VpnConnection -name "VPNname"via une commande d' un mot (non réservée), vpnpar exemple via un alias? Malheureusement, set-Alias vpn "Get-VpnConnection -name VPNname"cela ne fonctionne pas, pas plus set-Alias vpn Get-VpnConnection -name "VPNname"(notez la position différente du premier guillemet).

Jusqu'à présent, ma "solution de contournement" consiste à enregistrer la commande en tant que fichier de script dans le "répertoire de démarrage" de PowerShells (dans mon cas C:\Users\username) et à l'exécuter .\vpn.ps1via un alias. Je crée l'alias en utilisant set-Alias vpn ".\script_vpncheck.ps1". Existe-t-il un moyen direct de le faire (sans créer de fichier de script)?

Question de suivi: Au cas où cela ne serait pas possible, je voudrais initialiser les alias en utilisant un fichier script, par exemple via .\script.ps1(Remarque: je n'ai pas besoin de les stocker de manière permanente). Malheureusement ça ne fonctionne pas. Le fichier semble être exécuté mais les alias ne fonctionnent pas. Une idée pourquoi?

Réponses

3 phuclv Oct 20 2020 at 13:25

Stockez simplement l'alias du profil

  • Ouvrez le profil à partir de PowerShell en exécutant notepad $PROFILE(ou utilisez l'un de vos éditeurs préférés)
  • Entrez les commandes que vous souhaitez exécuter dans ce fichier et enregistrez (par exemple Set-Alias)
  • Redémarrez PowerShell ou source le profil nouvellement mis à jour en exécutant . $PROFILE

Le profil est exactement comme .bashrcdans bash qui sera exécuté au démarrage du shell. Outre les alias, vous pouvez également écrire des fonctions pour des choses plus complexes. Ils seront disponibles après le démarrage de PowerShell

function vpn($url) { Get-VpnConnection -name $url }
Set-Alias -Name vpn -Value Get-VpnConnection

Vous ne pouvez pas définir d'alias pour les commandes avec des arguments, vous devez donc créer une fonction dans ce cas

La raison pour laquelle votre fichier ps1 ne fonctionne pas est qu'il est exécuté dans le sous - shell et que lorsque le sous-shell se ferme, tout sera effacé, y compris les nouveaux alias. Vous devez générer le script à l'aide de l'opérateur dot source .(similaire à .dans bash) pour l'exécuter dans le shell actuel

. .\script.ps1

Mais au lieu de l'approvisionner chaque fois que vous voulez l'alias, faites-le de manière permanente dans le profil comme ci-dessus

1 KeithMiller Oct 20 2020 at 17:41

Les alias ne sont pas destinés à accepter des paramètres. À partir de la about_aliasesrubrique d'aide:

NOMS ALTERNATIFS POUR LES COMMANDES AVEC PARAMÈTRES

Vous pouvez attribuer un alias à une applet de commande, un script, une fonction ou un fichier exécutable. Vous ne pouvez pas attribuer d'alias à une commande et à ses paramètres. Par exemple, vous pouvez attribuer un alias à la cmdlet Get-Eventlog, mais vous ne pouvez pas affecter un alias à la commande Get-Eventlog -LogName System.

Vous pouvez créer une fonction qui inclut la commande. Pour créer une fonction, tapez le mot "fonction" suivi d'un nom pour la fonction. Tapez la commande et placez-la entre accolades ({}).

Par exemple, la commande suivante crée la fonction syslog. Cette fonction représente la commande Get-Eventlog -LogName System:

function Get-SystemEventlog {Get-Eventlog -LogName System}
Set-Alias -Name syslog -Value Get-SystemEventlog

Vous pouvez maintenant taper "syslog" au lieu de la commande. Et, vous pouvez créer des alias pour la nouvelle fonction.

Mais vous n'avez pas besoin d'un fichier de script séparé. Vous pouvez définir une fonction simple et l'ajouter à votre profil avec le code suivant:

'Function vpn { Get-VpnConnection -name VPNname }' | Add-Content $PROFILE

La commande vpnsera disponible dans toutes les sessions PowerShell à partir de ce moment.