我正在写一个 导航Cmdlet提供程序 对于 PowerShell。通过 获取项目获取子项目 覆盖,有多种类型的对象被写入管道。

的文档 IPropertyCmdletProvider 接口告诉我们以下内容:

开发人员应执行 下的接口 条件

  • 当用户必须使用 cmdlet(如 Get-Property 和 Set-Property cmdlets.
  • 对于从 ItemCmdletProvider 派生的提供程序、 ContainerCmdletProvider 或 NavigationCmdletProvider 类。

困惑:

我认为没有太多有用的信息,因为用户如何知道他们是否 必须 使用 Get-Property 和 Set-Property cmdlet?我想这取决于 Cmdlet 作者。最大的困惑(至少对我来说)是 Cmdlet 是否将对象写入管道;这些对象具有公开的可调用属性(即获取/设置);与直接操作对象相比,调用 Get-Property/Set-Property 有什么好处?

问题:

什么情况下应该实现IPropertyCmdletProvider接口?

我知道我在这里错过了一些东西!任何见解将不胜感激。

有帮助吗?

解决方案

哇,那些文档有点旧了。没有 Get/Set-Property cmdlet。这必须引用 Get/Set-ItemProperty cmdlet。对于RegistryProvider,这些cmdlet 是必不可少的,因为它是访问注册表值的唯一方法。也就是说,Get-Item/ChildItem cmdlet 仅返回RegistryKey 对象,而不返回注册表值对象(它们在.NET 中不存在)。您必须使用 Get/Set-ItemProperty 来获取/设置 regkey 下的特定 regvals。

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方法,您确实需要实现这个接口,但如果您采用FileSystem提供程序所采用的路线,那么它就不那么重要了,因为您可以轻松地直接访问Get返回的对象的属性项目/子项目。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top