問題タブ [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.
powershell - Powershellに他のファイルシステムで仮想ファイルシステムを提供する方法はありますか?
カスタムPSDriveのサポートを作成できることを知っています。しかし、それらは常にファイルシステムのルートです。Set-Location
アーカイブファイルを入力してフォルダのように使用するなど、ファイルシステムの任意のノードでVFSを開始できるようにする方法があれば便利です。(FarのようなKindaがこれを行います)。
これを達成する方法はありますか?私はそれを正しくそして機能させるためにいくらかの仕事があることを知っています、しかし今のところ私はそれがまったく可能であるかどうかもっと興味があります。
ETA:私が望んでいないのは、入力するすべてのアーカイブ用の新しいPSDriveであるため、実際には次のものは私が求めているものではありません。
むしろ
c# - Powershell プロバイダーのドライブ情報を保持するにはどうすればよいですか?
SQL データベース上のビジネス ロジック レイヤーである私の Powershell プロバイダーでは、Powershell ドライブはデータベース接続設定と同等です。この接続設定のコレクションは、ローカル コンピューター上の暗号化された XML ファイルに保持されます。管理者は、これらの PS ドライブをコンピューターに追加して、別の Powershell ユーザーがスクリプトを作成するときに使用できる SQL Server 資格情報を提供できます。管理者が New-PSDrive を実行すると、ドライブがコレクションに追加され、XML に保存されます。彼らが PSDrive を削除すると、永続的な XML からドライブが削除されます。これはうまくいきます。ただし、Powershell ホストが終了すると、既存のドライブごとに RemoveDrive() が呼び出されます。この時点では、ドライブをコンピューターに保持する必要があるため、ドライブを削除したくありません。
Remove-PSDrive を手動で実行しているユーザーから RemoveDrive() が呼び出されているか、またはホストが終了しているかどうかを確認するにはどうすればよいですか?
また、うまく機能するカスタム ドライブ情報パラメーターを作成しましたが、ドライブの追加と削除に使用するカスタム コマンドレットも作成しました。コマンドレットから psdrive を作成 (および削除) するにはどうすればよいですか?
powershell - PowerShell で zip などのファイルをフォルダーとして表示するにはどうすればよいですか?
zip などのファイルを powershell のフォルダーとして表示するにはどうすればよいですか? PowerShellには、ドライブ プロバイダーに似たフォルダー (アイテム) プロバイダーの概念がありますか? ドライブプロバイダーを実装せずにこれを行うことはできますか?
予備検索ではいくつかの有用な情報が見つかりましたが、その外観からは、まだシバン全体を実装する必要があるようです。
powershell - PowerShell InitializeDefaultDrive
私のカスタム PowerShell プロバイダーでは、ユーザーが InitializeDefaultDrives への内部呼び出しをスキップできるようにしたいと考えています。
InitializeDefaultDrives メソッドは、プロバイダーの開始時に呼び出されます。これは、Add-SnapIn コマンドレットを使用してプロバイダーを読み込むときだと思います。Add-SnapIn コマンドレットに動的パラメーターを追加する方法を探しているようです。
InitializeDefaultDrives の実装をスキップして、必要に応じてユーザーに new-PsDrive を使用して手動でドライブを追加してもらうことができることはわかっています。それは私がしたいことではありません。ユーザーがこれをスキップしたい場合を除いて、常にデフォルトのドライブを作成したいと考えています。
ありがとう!
powershell - PowerShell カスタム プロバイダーの RemoveItem
カスタムPowerShellプロバイダーを実装しています。現在、remove-item コマンドレットの実装に取り組んでいます。
RemoveItem メソッドには次のシグネチャがあります。
入力するとRemove-Item .\Myobject -recurse
、PowerShell インフラストラクチャによって、RemoveItem メソッドtrue
のパラメーターの値が提供されます。recurse
ただし、次のように入力すると、Remove-Item .\MyObject' という質問が表示されます。
MyObject の項目には子があり、Recurse パラメーターが指定されていません。続行すると、すべての子がアイテムとともに削除されます。続行してもよろしいですか?[Y] はい [A] すべてはい [N] いいえ [L] すべていいえ [S] 一時停止 [?] ヘルプ (デフォルトは「Y」):
この質問は、PowerShell インフラストラクチャによって提示されると思います。削除したいオブジェクトはコンテナなので、これで問題ありません。上記の質問に「はい」と答えた場合、PowerShell インフラストラクチャは再帰パラメーターを設定しません。RemoveItem
実際、私のメソッドが呼び出されたときは falseです。質問に「はい」と答えたので、パラメーターが true であることを除きます。
私の質問は次のとおりです。
PowerShell が bool recurse パラメーターを正しい値に設定しないのはなぜですか?
他の方法で値 (質問への回答) を取得する必要がありますか? どのように?
上記が不可能な場合、質問を抑制する方法はありますか?
powershell - psproviderでPowerShellタブの拡張をサポートするにはどうすればよいですか?
いくつかの内部階層データにPowershellPSProviderを実装しています。すべてが正常に機能します。通常のcd/dirコマンドを使用してツリーをナビゲートできますが、機能しないのはタブ補完だけです。
私が見ることができるのは、Tabが押されたときにPowershellがパスにアスタリスクを付けて関数GetChildName()を呼び出すことです(「dirc」と入力してTabキーを押すと、GetChildName()関数は文字列「c*」で数回呼び出されます)。「c」で始まるフォルダーからすべての子の名前を返そうとしましたが、Powershellでは常に最初の子の名前だけが前面に表示されます。この動作に関するドキュメントが見つかりません。何が欠けていますか?
powershell - PowerShell プロバイダーでは、データを更新するのとキャッシュするのはいつですか?
C# で PowerShell プロバイダーを作成しています。プロバイダーは、ドライブのようなインターフェイスを介してアプリケーション ドメイン オブジェクトを公開します。例えば:
このデータは、最終的にデータベースから取得されます。
データを取得するためにいつデータベースにアクセスし、いつキャッシュする必要があるかについて、優れたガイダンスを見つけることができませんでした。PowerShell が ItemExists や GetChildNames などのメソッドを何度も呼び出していることがわかりました。多くの場合、同じコマンドに対して繰り返します。たとえば、オートコンプリートのために Tab キーを押したからといって、データベースに 5 回または 6 回アクセスするのは実際的ではありません。
しかし同時に、ユーザーとしてコマンド プロンプトでGet-ChildItem
( dir
) と入力してリストを表示し、PowerShell の外部で何かを実行して、データが更新されたことを確認します。別のディレクトリ リストを取得すると、データベース。
問題を説明する適切な用語を (PowerShell の用語で) 知っていれば、答えを Google で検索したり、既存の重複した質問を見つけたりできると思いますが、行き詰まっています。
powershell - PowerShellプロバイダーの相対パスタブ-補完の問題
単純なPowerShellを実装しましたNavigationCmdletProvider
。
知らない人にとっては、これは、事実上仮想ファイルシステムドライブであるコマンドレットを使用してスナップインを作成できることを意味します。このドライブは、通常のフォルダーと同じように、PowerShellからマウントしてナビゲートできます。ドライブに対する各アクション(たとえば、パスが有効なアイテムを指しているかどうかの確認、フォルダー内の子アイテムの名前のリストの取得など)は、クラスから継承された.NETクラスのメソッドにマップされますNavigationCmdletProvider
。
タブ補完の問題に直面しているので、解決策を見つけたいと思います。相対パスを使用すると、タブ補完によって誤った結果が得られることがわかりました。絶対パスの場合、正常に機能します。
知らない人のために、タブ補完は、クラス からオーバーライドされるメソッドをNavigationCmdletProvider
呼び出すPowerShellを介して機能します。GetChildNames
NavigationCmdletProvider
-問題のデモンストレーション--
次のフォルダー階層を持つプロバイダー「TEST」があるとします。
絶対パス:
「dir TEST::child1\
」と入力して数回押すとtab、期待どおりの結果が得られます。
相対パス:
まず、「TEST::child1」に移動します。
次に、「dir
space」と入力して数回押すとtab、間違った結果が表示されます。
私は代わりにこれらを見ることを期待しています:
これはPowerShellのバグですか、それとも何か間違ったことをしていますか?
プロバイダーの完全な自己完結型コードは次のとおりです。
powershell - コマンド「cd WSMan:\localhost\shell」はどのように機能しますか? どうすれば再現できますか?
Powershell を使用して、特別な「cd」コマンドを使用して WinRM を構成できます。それがどのように機能し、自分のアプリにそのタイプのプラグインを実装する方法を誰か説明できますか?
powershell - Set-Location Powershell プロバイダー
作成した PowerShell の参照に問題があります。
ここにリストされているメソッドを実装しました
ドキュメントには次のようにも書かれています
Set-Location: このコマンドレットは、現在の作業場所を指定された場所に設定します。>このコマンドレットをサポートするメソッドを上書きする必要はありません。
しかし、私はエラーが発生しています
cd : プロバイダがこの操作をサポートしていないため、プロバイダの操作は停止しました。行:1 文字:1 + cd banksia:\ + ~~~~~~~~~~~~ + CategoryInfo : NotImplemented: (:) [Set-Location], PSNotSupportedException + FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands .SetLocationCommand
Set-Location を機能させるには、何を実装する必要がありますか?