Должен ли я реализовать интерфейс IPropertyCmdletProvider для командлета PowerShell?

StackOverflow https://stackoverflow.com/questions/1539840

  •  20-09-2019
  •  | 
  •  

Вопрос

Я пишу книгу NavigationCmdletProvider - навигационный модуль для PowerShell.Через Получить объект и GetChildItems ( Получить дочерние элементы) переопределяет, существуют различные типы объектов, которые записываются в конвейер.

Документы для ipropertycmdletпровайдер интерфейс сообщает нам следующее:

Разработчики должны реализовать этот интерфейс при соблюдении следующих условий:

  • Когда пользователи должны использовать командлеты, такие как Get-Property и Set-Property командлеты.
  • Для поставщиков, которые являются производными от классов ItemCmdletProvider, ContainerCmdletProvider или NavigationCmdletProvider.

Замешательство:

На мой взгляд, не так много полезной информации, потому что как пользователь узнает, если они должен использовать командлеты Get-Property и Set-Property?Я бы предположил, что это зависит от автора командлета.Большая путаница (по крайней мере, для меня) заключается в том, что командлет записывает объекты в конвейер;и у этих объектов есть открытые свойства, которые можно вызывать (т. е.получить/установить);какие преимущества имеет вызов Get-Property / Set-Property по сравнению с непосредственным манипулированием объектами?

Вопрос:

При каких обстоятельствах должен быть реализован интерфейс IPropertyCmdletProvider?

Я знаю, что здесь чего-то не хватает!Мы были бы очень признательны за любую информацию.

Это было полезно?

Решение

Ничего себе, эти документы немного устарели.Командлетов Get /Set-Property не существует.Это, должно быть, относится к командлетам Get/Set-ItemProperty.В случае RegistryProvider эти командлеты необходимы, поскольку это единственный способ получить доступ к значениям реестра.То есть командлеты Get-Item / ChildItem возвращают только объекты RegistryKey и никогда объект registry value (они не существуют в .NET).Вы должны использовать Get /Set-ItemProperty, чтобы получить / установить определенные регулярные значения в regkey.

OTOH поставщик файловой системы позволяет вам напрямую обращаться к контейнерам (dirs) и листьям (файлам).Вы можете получить содержимое файла напрямую.Тем не менее, вы можете использовать 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-Item / ChildItem .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top