web-dev-qa-db-ja.com

中間に引数を持つPowerShellエイリアスを作成するにはどうすればよいですか?

特定のパラメーターを使用してMinGWのg ++​​実行可能ファイルを実行するようにWindows PowerShellエイリアスを設定しようとしています。ただし、これらのパラメーターは、ファイル名およびその他の引数の後に来る必要があります。機能をセットアップしようとする面倒なことはしたくありません。次のようなことを簡単に言う方法はありますか?

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

またはそれらの線に沿って何か?私はPowerShellにあまり詳しくないので、解決策を見つけるのに苦労しています。誰でも?

62
Ken Bellows

Romanが述べたように、エイリアスではなく関数を使用したい。このようなもの:

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

これを試すために、簡単な例を示します。

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

PowerShellを実行するたびに利用できるようにするために、これをプロファイルに追加することもできます。プロファイルファイルの名前は$profileに含まれています。

97
Mark

そのような方法は組み込まれていません。私見、ラッパー関数はこれまでのところ最善の方法です。しかし、次のようないくつかの回避策が考案されたことを知っています。

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

5
Roman Kuzmin

これは、呼び出された方法に基づいて異なることを行うサンプル関数です。

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

関数を作成し、エイリアスとして保存し、後で使用するためにプロファイル全体を永続化するには、次を使用します。

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

ALIASを目的のエイリアスに、COMMANDSを実行するコマンドまたはコマンドの文字列に置き換えました。

もちろん、それを行う代わりに、次の方法で上記のエイリアスを作成できます(する必要があります!)。

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

PowerShellに2番目のコードブロックを貼り付けた(そしてPowerShellを再起動した)後、脳がすべての再帰(エイリアスのエイリアスなど)で裏返しになった場合に備えて、簡単な使用例を次に示します。

alias myEcho 'echo $args[0]'

または引数なし:

alias myLs 'ls D:\MyFolder'

まだプロファイルを持っていない場合

まだプロファイルがない場合、上記の方法は失敗します!その場合は、New-Item -type file -path $profile -forceこの回答から

1
NH.