2012-10-01 7 views
8

Ich habe ein benutzerdefiniertes C# PowerShell-Cmdlet (erbt von der Cmdlet-Basisklasse) und möchte feststellen, ob der Parameter "-Verbose" beim Ausführen des Cmdlet angegeben wurde . Ich stelle fest, dass WriteVerbose ausgeben wird, wenn der Parameter -Verbose angegeben wird, aber ich möchte tatsächlich anderen Code ausführen, wenn -Verbose angegeben ist (d. H. Die Console.Write-Werte nicht ausgegeben, wenn -Verbose angegeben ist).In benutzerdefiniertem C# -PowerShell-Cmdlet Identifizieren, wenn -Verbose angegeben wurde

Danke,

John

Antwort

7

Überprüfen Sie die gebundenen Parameter des Cmdlets wie so:

if (this.MyInvocation.BoundParameters.ContainsKey("Verbose")) 
{ 
} 
+0

MyInvocation ist kein Mitglied des Objekts "this" (Cmdlet). Die Klasse erbt von System.Management.Automation.Cmdlet. –

+0

Gibt es einen Grund, nicht von PSCmdlet zu erben? –

+1

Sie müssen ziemlich viel von PSCmdlet erben, um die gebundenen Parameter zu erhalten. Beachten Sie außerdem, dass Verbose in den gebundenen Parametern enthalten ist, auch wenn es als -Verbose: false angegeben wurde. Daher müssen Sie den Wert des Parameters im Idealfall auch überprüfen. – StephenD

0

Nach etwa viel zu graben, das für mich arbeitet. Visual Studio 2013, Powershell 3.0 C# -Cmdlet mit dem PsCmdlet-Namespace. Import-Module. \ Mytest.dll, dann mytest -verbose

blnVerbose = this.MyInvocation.Line.ToLower().Contains("-verbose"); 
0

Wenn Sie die Microsoft.PowerShell.5.ReferenceAssemblies Bezugsanordnung werden unter Verwendung der Parameter in der VerboseCmdlet Basisklasse enthalten ist. Sie können WriteVerbose() verwenden, um zu schreiben, wenn der Switch enthalten ist. Es gibt keine Notwendigkeit, es selbst länger zu handhaben.

Verwandte Themen