問題タブ [powershell-provider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
281 参照

c# - Powershell プロバイダー - GetItem パス エラー - ドライブとしてのカスタム ファイル

カスタム プロジェクト ファイルを新しい PS ドライブとしてエミュレートしようとしています。NavigationCmdletProviderから派生したカスタムPowershell プロバイダーを作成しようとしています。ファイルからプロジェクトを読み取って含めるように PSDriveInfo をオーバーライドしました。ファイルパスは PSDriveInfo のルートにあります。

GetItem を適切にオーバーライドできません。私がやりたいのは、GetNamesFromPath(path, out tableName, out rowNumber)メソッドを使用することです。私のカスタム プロジェクトは基本的にデータセットであるため、tableName を使用して DataTable を取得し、DataRow の ID として rowNumber を取得したいと考えています。

問題は、「パスが存在しません」という種類のエラーが発生することです。オーバーライドされたメソッドに入ることはありません。オーバーライドするものがありませんか? ファイルパスは実際には存在しませんが、パスを処理し、有効なパスであるかどうかを確認せずに、返されたオブジェクトとして必要なもので WriteItemObject を使用するだけです。

編集 1: 私が気づいたことの 1 つは、GetItemそれがIsValidPath. ブレークポイントをデバッグして使用するときは、最初にドライブをロードしてSet-LocationからドライブIsItemContainerを呼び出します (動作させるにはオーバーライドする必要がありますSet-Location)。

GetItemIsValidPathオーバーライドされたメソッドを呼び出す前に有効なパスをチェックするかのように、まったく呼び出されません。存在しないパス (ファイル自体を除く) を処理できNavigationCmdletProviderますか?パスと同じように手動で処理される文字列のみを処理できますか?

0 投票する
1 に答える
313 参照

c# - カスタム プロバイダーの C# コードから Powershell モジュールを読み込む

私は、C# で記述しているカスタム プロバイダーに関連付ける非常に特定の機能の "必要性" に取り組んできました。

基本的に、私は複製する方法を見つけることに着手しました

入力する代わりに、PowerShell の読み込み時に定義される etc 関数

前述のことだけを行うことができます

最初にプロバイダーに関数を実行空間に注入させようとしましたが、それを機能させるタイミングを完全に逃しているように見えるので、別のルートに進みました。

基本的に私は非常に単純な PSM1 ファイル UseColons.psm1 を持っています

簡単に言えば、ロードされたすべてのプロバイダーをループし、次に各プロバイダーのすべてのドライブをループして、{DriveName}: 形式に一致する関数が Function: ドライブに含まれているかどうかを確認し、見つからない場合は作成します。

psd1ファイルは、すべての関数をエクスポートするだけです

これは、独自のフォルダーの下の %ProgramFiles%\WindowsPowerShell\Modules パスに格納されます

そして最後に、%windir%\system32\windowspowershell\v1.0 ディレクトリの下に profile.ps1 があります。

したがって、PowerShell または ISE をロードするときに、変数を介して dir を呼び出したい場合は、単に呼び出すことができます

または、レジストリに戻す必要がある場合

複数のプロバイダーで作業している場合、切り替え時にその CD を何度も入力するのは面倒です。

さて、私はまだ、これが本来意図していた実際の PowerShell プロバイダーの開発に取り組んでいます。しかし、それをデバッグすると、Visual Studio が向きを変える前に UseColons モジュールが読み込まれ、新しいプロバイダーが読み込まれるため、モジュールを手動で削除して再度インポートすると、その機能が実行され、プロバイダーのすべてのドライブ機能が得られます。

その長い説明の後で、次のいずれかを行う方法を知りたいと思いました。

  • UseColons モジュールをセットアップして LAST をロードする
  • 初期化時にカスタム プロバイダー (プロバイダーとカスタム コマンドレットがあるため、技術的にはモジュール) が UseColons モジュールをロードする方法を見つけます。
  • 標準プロファイルから削除したくありません。これは、新しいプロバイダーに取り組んでおらず、管理用に powershell を使用するだけのツールを使用しているときに非常に役立つためです。

    うまくいけば、誰かが私にいくつかのアイデアを提供したり、優れた深いダイブ PowerShell プロバイダーのドキュメントやハウツーの方向性を教えてくれたりします。