Debería implementar la interfaz IPropertyCmdletProvider para un cmdlet de PowerShell?
-
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 IPropertyCmdletProvidercircunstancias?
Yo sé que me falta algo aquí! Cualquier penetración sería muy apreciada.
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.