web-dev-qa-db-fra.com

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 paramètres. Cependant, ces paramètres doivent venir après le nom de 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 simplement dire 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?

62
Ken Bellows

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

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

Pour l'essayer, voici un exemple simple:

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

Vous pouvez également vouloir mettre cela dans votre profil afin de le rendre disponible lorsque vous exécutez PowerShell. Le nom de votre fichier de profil est contenu dans $profile.

97
Mark

Il n'y a pas un tel moyen intégré. À mon humble avis, une fonction wrapper est la meilleure façon d'aller jusqu'à présent. 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

5
Roman Kuzmin

Il s'agit d'un exemple de fonction qui fera différentes choses en fonction de son nom:

Function Do-Something {
[CmdletBinding()] 
[Alias('DOIT')]
Param(
    [string] $option1,
    [string] $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}
}
2
Josh

Pour créer une fonction, la stocker en tant qu'alias et conserver le tout dans 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 faire cela, 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 se serait retourné de toutes les récursions (alias des alias, etc.), après avoir collé le deuxième bloc de code sur votre PowerShell (et redémarré PowerShell), un exemple simple de son utilisation est:

alias myEcho 'echo $args[0]'

ou sans arguments:

alias myLs 'ls D:\MyFolder'

Si 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à partir de cette réponse .

1
NH.