Devo implementar a interface IPropertyCmdletProvider para um cmdlet do PowerShell?
-
20-09-2019 - |
Pergunta
Estou escrevendo um NavigationCmdletProvider para PowerShell.Através de ObterItem e Obter itens infantis substituições, existem vários tipos de objetos que são gravados no pipeline.
Os documentos para IPropertyCmdletProvider interface nos diga o seguinte:
Os desenvolvedores devem implementar isso interface sob o seguinte Condições:
- Quando os usuários devem usar cmdlets como Get-Property e Set-Property cmdlets.
- Para um provedor que deriva do ItemCmdletProvider, ContainerCmdletProvider, ou NavigationCmdletProvider classes.
Confusão:
Na minha opinião, não há muitas informações úteis porque como um usuário saberia se deve usar os cmdlets Get-Property e Set-Property?Eu imagino que isso depende do autor do Cmdlet.A grande confusão (pelo menos para mim) é se o Cmdlet grava os objetos no pipeline;e esses objetos têm propriedades expostas que podem ser chamadas (ou seja,prepare-se);quais benefícios a chamada Get-Property/Set-Property tem em relação à manipulação direta do(s) objeto(s)?
Pergunta:
Sob quais circunstâncias a interface IPropertyCmdletProvider deve ser implementada?
Eu sei que estou faltando alguma coisa aqui!Qualquer visão seria muito apreciada.
Solução
Uau, esses documentos são um pouco antigos.Não há cmdlets Get/Set-Property.Isso deve estar se referindo aos cmdlets Get/Set-ItemProperty.No caso do RegistryProvider, esses cmdlets são essenciais porque são a única forma de acessar os valores do registro.Ou seja, os cmdlets Get-Item/ChildItem retornam apenas objetos RegistryKey e nunca um objeto de valor de registro (eles não existem no .NET).Você deve usar Get/Set-ItemProperty para obter/definir regvals específicos em uma regkey.
OTOH, o provedor FileSystem, permite acessar diretamente contêineres (dirs) e folhas (arquivos).Você pode obter o conteúdo de um arquivo diretamente.Ainda assim, você pode usar Get-ItemProperty se quiser obter o LastWriteTime de um arquivo:
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
No entanto, eu normalmente não acessaria essa propriedade dessa maneira.Acho que a saída é muito detalhada.Eu faria isso:
PS> (Get-Item .\DotNetTypes.format.ps1xml).LastWriteTime
Friday, April 24, 2009 11:21:46 AM
Quanto à orientação, eu diria que você realmente precisa implementar essa interface se adotar a abordagem RegistryProvider, mas é menos importante se você seguir o caminho que o provedor FileSystem seguiu porque você pode acessar facilmente as propriedades diretamente dos objetos retornados por Get- Item/FilhoItem.