2012-10-01 9 views
8

Ho un Cmdlet C# PowerShell personalizzato (che eredita dalla classe base Cmdlet) e voglio essere in grado di identificare se il parametro "-Verbose" è stato specificato durante l'esecuzione del cmdlet . Mi rendo conto che WriteVerbose verrà emesso quando viene specificato il parametro -Verbose, ma vorrei effettivamente fare un altro codice quando viene specificato -Verbose (ad esempio non emettere i valori di Console.Write quando viene specificato -Verbose).Nel cmdlet C# PowerShell personalizzato Identificare se -Verbose è stato specificato

Grazie,

John

risposta

7

Verificare i parametri legati al cmdlet in questo modo:

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

MyInvocation non è un membro dell'oggetto "this" (Cmdlet). La classe eredita da System.Management.Automation.Cmdlet. –

+0

C'è un motivo per non ereditare da PSCmdlet? –

+1

Devi praticamente ereditare da PSCmdlet per ottenere i parametri associati. Si noti inoltre che Verbose sarà nei parametri associati anche se è stato specificato come -Verbose: false, quindi idealmente è necessario controllare anche il valore del parametro. – StephenD

0

Dopo tanto scavare su, questo funziona per me. Visual Studio 2013, Powershell 3.0 Cdn C# che utilizza lo spazio dei nomi PsCmdlet. Import-Module. \ MyTest.dll, quindi mytest -verbose

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

Se si utilizza l'assemblaggio Microsoft.PowerShell.5.ReferenceAssemblies di riferimento il parametro Verbose è incluso nella classe Cmdlet base. È possibile utilizzare WriteVerbose() per scrivere quando lo switch è incluso. Non è più necessario gestirlo da solo.