2

バックグラウンド:

次のようなsmall_commandsを理解して解釈するPowerShell関数があるとします。

todolist.additem/title=shopping/body=get milk

さらに、次のような関数を呼び出すとします。

myfunc [small_command goes here]

質問: smallコマンドの前に「myfunc」を付けるのを忘れた場合でも、small_commandを入力し、PowerShellでmyfuncを呼び出させる方法はありますか?「コマンドが見つかりません」エラーをトラップする方法があれば、これは機能するようです。

この質問の背後にある一般的な考え方は、問題のあるコマンドラインを入力ミスから「回復」しようとする関数に渡すことで、コマンドが見つからないエラーから回復する機能です。

アップデート:

4

4 に答える 4

3

トラップ ステートメントを使用し、トラップする例外を指定して、CommandNotFound をトラップできます。

& {
    trap [Management.Automation.CommandNotFoundException] 
    {
        "Code to Run here"; 
        (get-history);
        continue
    } 
    NotACommand
    }

このコードは、CommandNotFoundException のトラップを設定し、NotACommand の「コマンド」に到達すると、トラップ ステートメントを呼び出し、「ここで実行するコード」を含むブロック内のコードを実行してから続行します。

私が確信していない唯一のことは、実行をスローしたコマンドラインにアクセスすることです。おそらくget-historyを使用しています。

于 2009-09-22T16:16:49.967 に答える
2

残念ながら、powershell には「最後の溝」コマンド フックはありません。チームにそのような機能を検討するように依頼しましたが、v3 にそのような機能が含まれるかどうかはまだわかりません。

つまり、各対話型コマンドの後に呼び出されるプロンプト関数にコードを追加することで、この動作をエミュレートできます。$? をテストできますか? 最後のコマンド $^ の成功を示すシステム変数。もちろん、この手法はインタラクティブにしか機能せず、すべての引数を取得することは困難です。

-オイシン

于 2009-09-19T16:16:12.387 に答える
2

small_command ...実行するには、それぞれエイリアス/スクリプトを作成する必要がありますmyfun small_command ...

$MyInvocationこれがエイリアス マッピングによって書き換えられていない場合は、メイン スクリプトで を参照すると、エイリアスが役立つ場合があります。

于 2009-09-18T16:18:14.493 に答える