Comment puis-je écrire un alias PowerShell avec des arguments au milieu?

J’essaie de configurer un alias Windows PowerShell pour exécuter l’exécutable g ++ de MinGW avec certains parameters. Cependant, ces parameters doivent venir après le nom du fichier et d’autres arguments. Je ne veux pas passer par les tracas d’essayer de mettre en place une fonction et tout ça. Existe-t-il un moyen de dire simplement quelque chose comme:

alias mybuild="g++ {args} -lib1 -lib2 ..." 

Ou quelque chose de ce genre? Je ne connais pas très bien PowerShell et j’ai du mal à trouver une solution. N’importe qui?

Vous voulez utiliser une fonction, pas un alias, comme Roman l’a mentionné. Quelque chose comme ça:

 function mybuild { g++ $args -lib1 -lib2 ... } 

Pour essayer ceci, voici un exemple simple:

 PS> function docmd { cmd /c $args there } PS> docmd echo hello hello there PS> 

Vous voudrez peut-être également mettre cela dans votre profil afin de le rendre disponible chaque fois que vous exécutez PowerShell. Le nom de votre fichier de profil est contenu dans le $profile .

Il n’y a pas un tel moyen intégré. IMHO, une fonction wrapper est le meilleur moyen d’aller si loin. Mais je sais que certaines solutions de contournement ont été inventées, par exemple:

https://web.archive.org/web/20120213013609/http://huddledmasses.org/powershell-power-user-tips-bash-style-alias-command

Pour créer une fonction, stockez-la en tant qu’alias et conservez l’intégralité de votre profil pour plus tard, utilisez:

 $g=[guid]::NewGuid(); echo "function G$g { COMMANDS }; New-Alias -Force ALIAS G$g">>$profile 

où vous avez remplacé ALIAS par l’alias souhaité et COMMANDS par la commande ou la chaîne de commandes à exécuter.

Bien sûr, au lieu de le faire, vous pouvez (et devriez!) Créer un alias pour ce qui précède en:

 echo 'function myAlias { $g=[guid]::NewGuid(); $alias = $args[0]; $commands = $args[1] echo "function G$g { $commands }; New-Alias -Force $alias G$g">>$profile }; New-Alias alias myAlias'>>$profile 

Juste au cas où votre cerveau serait retourné de toutes ses récursions (aliasing d’alias, etc.), après avoir collé le deuxième bloc de code sur votre PowerShell (et redémarré PowerShell), un exemple simple d’utilisation est:

 alias myEcho 'echo $args[0]' 

ou sans args:

 alias myLs 'ls D:\MyFolder' 

Iff vous n’avez pas encore de profil

La méthode ci-dessus échouera si vous n’avez pas encore de profil! Dans ce cas, utilisez New-Item -type file -path $profile -force de cette réponse .

Ceci est un exemple de fonction qui fera des choses différentes en fonction de comment il a été appelé:

 Function Do-Something { [CmdletBinding()] [Alias('DOIT')] Param( [ssortingng] $option1, [ssortingng] $option2, [int] $option3) #$MyInvocation|select *|FL If ($MyInvocation.InvocationName -eq 'DOIT'){write-host "You told me to do it...so i did!" -ForegroundColor Yellow} Else {Write-Host "you were boring and said do something..." -ForegroundColor Green} }