Devo implementar a interface IPropertyCmdletProvider para um cmdlet do PowerShell?

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

  •  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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top