Debería implementar la interfaz IPropertyCmdletProvider para un cmdlet de PowerShell?

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

  •  20-09-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un NavigationCmdletProvider de PowerShell. A través de la GetItem y GetChildItems anulaciones, hay varios tipos de objetos que se escriben en la tubería.

Los docs para interfaz IPropertyCmdletProvider nos dice lo siguiente:

  

Los desarrolladores deberían aplicar la presente   interfaz bajo el siguiente   condiciones:

     
      
  • Cuando los usuarios deben utilizar cmdlets como el Get-Propiedad y Set-propiedad   cmdlets.
  •   
  • Durante los proveedores que se derivan de la ItemCmdletProvider,   ContainerCmdletProvider, o   NavigationCmdletProvider clases.
  •   

Confusión:

No hay mucha información útil en mi opinión porque ¿cómo un usuario saber si debe utilizar el comando Get-Propiedad y Set-propiedad de cmdlet? Me imagino que eso es decisión del autor de cmdlet. La gran confusión (al menos para mí) es que si el cmdlet escribe los objetos a la tubería; y aquellos objetos han propiedades expuestas que son exigible (es decir, obtener / set); ¿Qué beneficios llamando Get-Propiedad / Set-Propiedad tener sobre la manipulación del objeto (s) directamente?

Pregunta:

En virtud de lo que debería implementarse la interfaz IPropertyCmdletProvider

circunstancias?

Yo sé que me falta algo aquí! Cualquier penetración sería muy apreciada.

¿Fue útil?

Solución

Wow esos documentos son un poco viejo. No hay cmdlets Get / Set-propiedad. Esto debe ser en referencia a los cmdlets Get / Set-ItemProperty. En el caso de la RegistryProvider, estos cmdlets son esenciales, ya que es la única manera de acceder a los valores del registro. Es decir, los cmdlets Get-Item / Childitem sólo devuelven objetos RegistryKey y no un objeto de valor de registro (que no existen en .NET). Usted tiene que utilizar Get / Set-ItemProperty para obtener / establecer regvals específicos bajo un regkey.

otoh el proveedor de sistema de archivos le permite acceder directamente a los contenedores (directorios) y hojas (archivos). Usted puede obtener el contenido de un archivo directamente. Aún así, puede utilizar Get-ItemProperty si desea obtener el LastWriteTime de un archivo:

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

Sin embargo, yo no suelen tener acceso a esta propiedad de esta manera. Me parece que la salida es a manera detallada. Me gustaría hacer esto:

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

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

En cuanto a orientación, yo diría que lo que realmente necesita para implementar esta interfaz si se toma el enfoque RegistryProvider pero es menos importante si vas a la ruta del proveedor de sistema de archivos fue porque se puede acceder fácilemte las propiedades directamente de los objetos devueltos por Get-Elemento / ChildItem.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top