Soll ich die IPropertyCmdletProvider Schnittstelle für ein Powershell-Cmdlets implementieren?
-
20-09-2019 - |
Frage
Ich schreibe eine NavigationCmdletProvider für Powershell. Durch die GetItem und IPropertyCmdletProvider Schnittstelle sagen uns die folgenden:
Entwickler sollten diese implementieren Schnittstelle unter der folgenden Bedingungen:
- Wenn Benutzer müssen Cmdlets wie Get-Property und Set-Liegenschaften Cmdlets.
- Für einen Anbieter, die von den ItemCmdletProvider ableiten, ContainerCmdletProvider oder NavigationCmdletProvider Klassen.
Verwirrung:
Nicht viele nützliche Informationen meiner Meinung nach, denn wie würde ein Benutzer wissen, ob sie müssen verwenden Sie die Get-Property und Set-Property-Cmdlets des? Ich könnte mir vorstellen, das ist zum Cmdlets Autor auf. Die große Verwirrung (zumindest für mich) ist, wenn die Cmdlets die Objekte in die Pipeline schreibt; und diese Objekte haben Eigenschaften ausgesetzt, die aufrufbar sind (das heißt get / set); Welche Vorteile bietet Get-Property / Set-Eigenschaft, um das Objekt zu manipulieren hat über Telefonnummer (n) direkt?
Frage:
Unter welchen Umständen sollte die IPropertyCmdletProvider umgesetzt werden Schnittstelle?
Ich weiß, ich bin hier fehlt etwas! Einsicht wäre sehr geschätzt.
Lösung
Wow diese Dokumente sind ein bisschen alt. Es gibt keine Get / Set-Property-Cmdlets. Dies muss auf die Get / Set-ItemProperty-Cmdlets beziehen werden. Im Falle des RegistryProvider sind diese Cmdlets wichtig, weil es die einzige Möglichkeit, den Zugriff auf Registry-Werte ist. Das heißt, das Get-Item / ChildItem Cmdlets Rückkehr nur RegistryKey Objekte und nie einen Registrierungswert Objekt (sie existieren nicht in .NET). Sie müssen verwenden Get / Set-ItemProperty zu bekommen / set spezifische regvals unter einem regkey.
OTOH die Filesystem-Anbieter können Sie direkt Zugang Container (dirs) und Blätter (Dateien). Sie können direkt den Inhalt einer Datei. Dennoch können Sie Get-ItemProperty verwenden, wenn Sie die Lastwritetime einer Datei erhalten möchten:
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
Allerdings würde ich nicht normalerweise Zugriff auf diese Eigenschaft in dieser Art und Weise. Ich finde die Ausgabe Art und Weise zu ausführlich. Ich würde dies tun:
PS> (Get-Item .\DotNetTypes.format.ps1xml).LastWriteTime
Friday, April 24, 2009 11:21:46 AM
Wie für die Führung, würde ich sagen, dass Sie wirklich diese Schnittstelle implementieren müssen, wenn Sie den RegistryProvider Ansatz nehmen, aber es ist weniger wichtig, wenn Sie die Route mit den Filesystem-Anbietern gehen gingen, weil Sie easly die Eigenschaften direkt zugreifen können von den zurückgegebenen Objekten von Get-Item / ChildItem.