Devo implementare l'interfaccia IPropertyCmdletProvider per un PowerShell Cmdlet?
-
20-09-2019 - |
Domanda
Sto scrivendo un NavigationCmdletProvider per PowerShell. Attraverso la GetItem e GetChildItems sostituzioni, ci sono vari tipi di oggetti che sono scritte alla pipeline.
La documentazione per interfaccia IPropertyCmdletProvider noi il seguente detto:
Gli sviluppatori dovrebbero implementare questo interfaccia nella seguente condizioni:
- Quando gli utenti devono utilizzare i cmdlet quali Get-proprietà e Set-proprietà cmdlet.
- Per un provider che derivano dalla ItemCmdletProvider, ContainerCmdletProvider, o classi NavigationCmdletProvider.
Confusione:
Non un sacco di informazioni utili a mio parere, perché come avrebbe un utente sapere se deve utilizzare il Get-proprietà e Set-Proprietà cmdlet di? Immagino che sta a l'autore cmdlet. La grande confusione (almeno per me) è se il cmdlet scrive gli oggetti alla pipeline; e quegli oggetti hanno proprietà che sono esposti richiamabile (cioè get / set); Quali sono i vantaggi di chiamare Get-Proprietà / Set-proprietà hanno oltre manipolare l'oggetto (s) direttamente?
Domanda:
In quali dovrebbe essere attuato l'interfaccia IPropertyCmdletProvider circostanze?
Lo so che mi manca qualcosa qui! Tutta la comprensione sarebbe molto apprezzato.
Soluzione
Wow quei documenti sono un po 'vecchio. Non ci sono cmdlet get / set-proprietà. Questo deve essere riferita ai cmdlet Get / Set-ItemProperty. Nel caso del RegistryProvider, questi cmdlet sono essenziali, perché è l'unico modo per accedere ai valori del Registro di sistema. Cioè, i cmdlet Get-Item / ChildItem restituiscono solo gli oggetti RegistryKey e mai un oggetto di valore di registro (che non esistono in .NET). Devi usare Get / Set-ItemProperty per ottenere / impostare regvals specifiche sotto un regkey.
OTOH il provider FileSystem permette di accedere direttamente contenitori (directory) e foglie (file). È possibile ottenere il contenuto di un file direttamente. Ancora, è possibile utilizzare Get-ItemProperty se si desidera ottenere il LastWriteTime di un file:
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
Tuttavia, vorrei normalmente non accedere a questa proprietà in questo modo. Trovo l'uscita è modo di verbose. Vorrei fare questo:
PS> (Get-Item .\DotNetTypes.format.ps1xml).LastWriteTime
Friday, April 24, 2009 11:21:46 AM
Per quanto riguarda la guida, direi che si ha realmente bisogno per implementare questa interfaccia, se si prende l'approccio RegistryProvider ma è meno importante se si va il percorso del provider FileSystem è andato, perché è possibile accedere facilmente alle proprietà direttamente degli oggetti restituiti da Get-Item / ChildItem.