2011-07-30 6 views
1

私はpowershellスクリプトモジュールを作成しています。最初に行うことの1つは、必要な値があることを確認するためのチェックです。そうでない場合、モジュールはロードして初期化し続けるべきではありません。しかし、私はモジュールがそれ自身を "削除"する方法を知らない。私は(モジュール内から)remove-moduleを呼び出してみましたが、驚くことではありませんでした。モジュールをアンロードする他の方法はありますか?powershellモジュール自体がアンロードできます

私はこれがモジュール外のスクリプトからするのは簡単ではないことを認識しています。しかし、私はこのモジュールを書いて、あまり精通していない他のユーザーと共有できるようにしています。モジュールPLUSに別のスクリプトを追加して、「これは例外で、通常のインポートモジュールを使用することはできません。代わりにこの他のスクリプトを見つけて実行することを忘れないでください」と説明してください。 。それ以外にも、余分なスクリプトを使用するのではなく、ユーザーが単純にimport-moduleを使用した場合(合理的にやりがいがあると思われる)に役立ちません。

答えて

0

あなたの質問に対する正確な回答ではありませんが、それでも解決策です。あなたのようなシナリオでは、私は別の方法をとるだろう。モジュールの一部ではない外部スクリプトを作成して、何かが欠落しているかモジュールが常にロードされているかどうかを確認し、モジュールによって公開された成功/失敗をチェックし、モジュールをアンロードします失敗の次に、Import-Moduleの代わりにこのスクリプトを使用します。

2

チェックが合格しなかった場合、モジュールにエラーが発生する可能性があります。これにより、モジュールのロードが停止します。たとえば、これをTest.psm1として保存してみてください。

throw "Could not load module."; 

インポートモジュール。\ Test.psm1を使用してロードしてみてください。エラーが発生し、Get-Moduleを呼び出した後にモジュールがロードされていないことがわかります。

+0

うーん、うまくいく可能性があります。しかし、私はモジュールがインポート時に実行されるコードでのみ動作すると思っています。後でモジュールをアンロードする必要はありません。たとえば、モジュールがインポート中にコードを実行してスローすると、maybeモジュールはロードされません。しかし、あなたがインポートモジュールを実行し、モジュール内のいくつかの関数を呼び出すと、モジュールがアンロードすべきであると言う何かが見つかった場合、スローがモジュールをアンロードできるとは思わない。私は試してみるためにいくつかのテストをしなければならないだろうと思います。しかし、お試しいただきありがとうございます。 – jay

+2

いいえ、あなたが正しいです、それはロードを停止するだけで、後でアンロードされません。おそらく、モジュールをアンロードするのが最良の方法ではないと主張しますが、モジュール内で関数を呼び出すと、その関数が使用されなくなります。ドアをノックして家が消えてしまうようなもの...もちろん、モジュールを取り除くと何が達成されますか?あなたはそれをリロードして、もう一度やり直しても同じことが起こります。たぶん、モジュールをフォールト状態にする方がよいでしょう。そのため、関数のいずれかを呼び出すと、問題が修正されるまでエラーが発生します。 – MrKWatkins

関連する問題