Dois-je mettre en œuvre l'interface IPropertyCmdletProvider pour une PowerShell Cmdlet?
-
20-09-2019 - |
Question
J'écris un NavigationCmdletProvider pour PowerShell. Grâce à la GetItem et l'interface de IPropertyCmdletProvider nous dire ce qui suit:
Les développeurs doivent mettre en œuvre cette interface sous ce qui suit conditions:
- Lorsque les utilisateurs doivent utiliser cmdlets comme le Get-propriété et Set-propriété cmdlets.
- Pour un des fournisseurs qui dérivent de la ItemCmdletProvider, ContainerCmdletProvider, ou les classes NavigationCmdletProvider.
Confusion:
Pas beaucoup d'informations utiles à mon avis, car comment un utilisateur de savoir si elles doivent utiliser la commande Get-propriété et la propriété Set-cmdlet de? J'imagine que c'est à l'auteur Cmdlet. La grande confusion (pour moi au moins) est de savoir si l'applet de commande écrit les objets à la canalisation; et ces objets ont des propriétés qui sont exposées appelable (c.-à-get / set); Quels sont les avantages appelant Get-Propriété / Set-Convenir sur la manipulation de l'objet (s) directement?
Question:
Dans quelles circonstances l'interface IPropertyCmdletProvider être mis en œuvre?
Je sais que je manque quelque chose ici! Toute idée serait grandement apprécié.
La solution
Wow ces documents sont un peu vieux. Il n'y a pas Get / cmdlets Set-propriété. Celle-ci doit se référer aux Get / cmdlets Set-ItemProperty. Dans le cas du RegistryProvider, ces cmdlets sont essentiels, car il est le seul moyen d'accéder à des valeurs de registre. Autrement dit, les cmdlets ne reviennent Get-Item / ChildItem objets RegistryKey et jamais un objet de valeur de Registre (ils n'existent pas dans .NET). Vous devez utiliser Get / Set-ItemProperty pour obtenir / set regvals spécifiques sous regkey.
OTOH le fournisseur FileSystem vous permet d'accéder directement à des conteneurs (dirs) et (fichiers) leafs. Vous pouvez obtenir le contenu d'un fichier directement. , Vous pouvez toujours utiliser Get-ItemProperty si vous voulez obtenir le LastWriteTime d'un fichier:
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
Cependant, je n'accéder normalement cette propriété de cette façon. Je trouve la sortie est une façon de bavard. Je ferais ceci:
PS> (Get-Item .\DotNetTypes.format.ps1xml).LastWriteTime
Friday, April 24, 2009 11:21:46 AM
En ce qui concerne l'orientation, je dirais que vous avez vraiment besoin de mettre en œuvre cette interface si vous prenez l'approche RegistryProvider mais il est moins important si vous allez l'itinéraire le fournisseur FileSystem est allé parce que vous pouvez accéder à easly les propriétés directement des objets retournés par Get-Item / ChildItem.