0

PowerShell用のNavigationCmdletProviderを作成しています。GetItemおよびGetChildItemsオーバーライドを介して、パイプラインに書き込まれるさまざまなタイプのオブジェクトがあります。

IPropertyCmdletProviderインターフェイスのドキュメントには、次のように記載されています。

開発者は、次の条件下でこのインターフェイスを実装する必要があります。

  • ユーザーがGet-PropertyコマンドレットやSet-Propertyコマンドレットなどのコマンドレットを使用する必要がある場合。
  • ItemCmdletProvider、ContainerCmdletProvider、またはNavigationCmdletProviderクラスから派生するプロバイダーの場合。

錯乱:

Get-PropertyコマンドレットとSet-Propertyコマンドレットを使用する必要があるかどうかをユーザーがどのように知るのでしょうか。それはCmdletの作者次第だと思います。(少なくとも私にとって)大きな混乱は、Cmdletがオブジェクトをパイプラインに書き込むかどうかです。そして、それらのオブジェクトには、呼び出し可能な(つまり、get / set)プロパティが公開されています。Get-Property / Set-Propertyを呼び出すと、オブジェクトを直接操作するよりもどのような利点がありますか?

質問:

どのような状況でIPropertyCmdletProviderインターフェイスを実装する必要がありますか?

私はここで何かが欠けていることを知っています!任意の洞察をいただければ幸いです。

4

1 に答える 1

3

うわー、それらのドキュメントは少し古いです。Get/Set-Property コマンドレットはありません。これは、Get/Set-ItemProperty コマンドレットを参照している必要があります。RegistryProvider の場合、レジストリ値にアクセスする唯一の方法であるため、これらのコマンドレットは不可欠です。つまり、Get-Item/ChildItem コマンドレットは RegistryKey オブジェクトのみを返し、レジストリ値オブジェクトは返しません (.NET には存在しません)。regkey の下で特定の regvals を取得/設定するには、Get/Set-ItemProperty を使用する必要があります。

FileSystem プロバイダーの OTOH を使用すると、コンテナー (ディレクトリ) とリーフ (ファイル) に直接アクセスできます。ファイルの内容を直接取得できます。それでも、ファイルの LastWriteTime を取得したい場合は、Get-ItemProperty を使用できます。

PS> Get-ItemProperty -Path .\DotNetTypes.format.ps1xml -Name LastWriteTime


PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Win
                dows\System32\WindowsPowerShell\v1.0\DotNetT
                ypes.format.ps1xml
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Win
                dows\System32\WindowsPowerShell\v1.0
PSChildName   : DotNetTypes.format.ps1xml
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
LastWriteTime : 4/24/2009 11:21:46 AM

ただし、通常、この方法でこのプロパティにアクセスすることはありません。出力が冗長であることがわかりました。私はこれをします:

PS> (Get-Item .\DotNetTypes.format.ps1xml).LastWriteTime

Friday, April 24, 2009 11:21:46 AM

ガイダンスとして、RegistryProvider アプローチを採用する場合は、このインターフェイスを実装する必要があると思いますが、Get-アイテム/子アイテム。

于 2009-10-08T19:32:51.243 に答える