1

PowerShell.Exitingエンジンイベントを使用してコマンド履歴を保存し、PowerShellセッションを閉じるときに他の整理を行って、プロファイルに登録します。

# Set up automatic functionality on engine exit.
Register-EngineEvent PowerShell.Exiting -SupportEvent -Action `
{
    #stuff
    ...
}

これは、コンソールウィンドウでPowerShellを使用する場合は完全に機能しますが、ISEでPowerShellを実行している場合は、PowerShell.Exitingイベントが発生しないように見えます。これは、通常のものであれ、テストコードであれ、何も入力しないためです。これまでに実行されます。

これは既知の問題ですか?もしそうなら、既知の回避策または代替案がありますか?

4

1 に答える 1

5

まあ、これは地獄のように奇妙です。

Register-EngineEvent呼び出しの外側でプロファイルを完全に切り取って、それでも機能しないことがわかった後、その内容も切り取り始め、残りのプロファイルを元の状態に復元しました。これが私の発見です:

write-hostのスクリプトブロックに、またはPowerShellホストへの他の出力がある場合Register-EngineEvent PowerShell.Exited、ISEを終了すると実行されません(コンソールを終了すると正常に機能しますが)。

実際、PowerShell.Exitedイベントに対して登録したスクリプトブロックは、ホストに出力するステートメントが含まれていない場合でも、実行されているようには見えません(これが、上記の他の人の作業例をテストしたときに、既存のイベントハンドラーを追加したプロファイルを実行せずにPowerShellを起動しない限り、それらが機能しなかった理由です。)

で使用するスクリプトブロックからホスト出力を引き起こすすべてのステートメントを消去するRegister-EngineEvent PowerShell.Exitedか、出力を別の場所にリダイレクトすると、すべてが機能し始めます。

(デバッガーで追跡する時間がまだないので、適切な量の塩でこれを取りますが、エンジンが完了する前にISEがタブを閉じているのではないかと疑っています...)

于 2013-01-30T14:31:22.327 に答える