2009-08-11 7 views
1

私のPowerShellプロバイダーは、SQLデータベース上のビジネスロジックレイヤーで、Powershellドライブはデータベース接続設定と同じです。この接続設定のコレクションは、ローカルコンピュータ上の暗号化されたXMLファイルに保存されます。管理者は、これらのPSドライブをコンピュータに追加して、SQL Server資格情報を提供し、別のPowershellユーザーがスクリプトの作成時に使用することがあります。管理者がNew-PSDriveを実行すると、コレクションにドライブを追加してXMLに保存します。 Remove-PSDriveを実行すると、永続的なXMLからドライブが削除されます。これは正常に動作します。ただし、Powershellホストが終了すると、既存のドライブごとにRemoveDrive()が呼び出されます。この時点では、ドライブをコンピュータ上に残す必要があるため、ドライブを取り外すことは望ましくありません。Powershellプロバイダーのドライブ情報を持続させる方法を教えてください。

Remove-PSDriveを手動で実行しているユーザーからRemoveDrive()が呼び出されているかどうか、またはホストが終了しているかどうかを確認するにはどうすればよいですか?

また、私は正常に機能するカスタムドライブ情報パラメータを作成しましたが、ドライブの追加や削除に使用するカスタムコマンドレットも書きました。自分のコマンドレットからpsdriveを作成(および削除)するにはどうすればよいですか?

答えて

0

これには、InitializeDefaultDrivesオーバーライドを使用します。これは、プロバイダーの初期化時にすべての適切なドライブを作成できるように、接続文字列の永続ストアを持つ必要があることを意味します。この情報を保存するには、Stop仮想メソッドをオーバーライドする必要があります。

+0

@keith:InitializeDefaultDrives()をオーバーライドしています。この関数では、永続化されたドライブのコレクションをディスクから読み込みます。 問題は、ドライブを削除できるように、Remove-PSDrive(RemoveDrive()にコールバックする)をスクリプタで実行する必要があることです。その時点で、私はそのドライブを削除し、それを私のXMLファイルから削除する必要があります。ただし、powershellが終了すると、ロードされたドライブごとにRemoveDrive()も呼び出されます。この場合、私はそれらを維持したくありません。 RemoveDrive()では、スクリプタがそれを実行しているかPowershellが終了しているかをどのように知ることができますか? –

+0

CmdletProvider.Stoppingプロパティは、ユーザーまたはPowerShellがドライブを削除するかどうかによって異なりますか? –

+0

キースはおそらく正しい軌道に乗っているでしょう - プロバイダのStopをオーバーライドすることによってフラグを設定することもできます - フラグが設定されている場合、powershellはシャットダウンしていますが、最初に呼び出されるのは不明です:provider.stopまたはremove -psdrive ... – x0n