2014-06-27 18 views
7

Ho scritto la mia funzione di registrazione Powershell Log con i parametri stream (su quale stream scrivere il messaggio) e message (il messaggio da scrivere).È possibile controllare se l'argomento -Verbose è stato fornito in PowerShell?

L'idea è che posso scrivere gli output sia sulla console che su un file di registro. Quello che faccio nella funzione è fondamentalmente determinare su quale flusso di pubblicare il messaggio (con uno switch) e poi scrivere il messaggio al flusso e il log-file:

switch ($stream) { 
    Verbose { 
     Write-Output "$logDate [VERBOSE] $message" | Out-File -FilePath $sgLogFileName -Append 
     Write-Verbose $message 
     break 
    } 
} 

La domanda è ora, è che possibile verificare se l'argomento -Verbose è stato dato?

L'obiettivo è scrivere il messaggio nel file di registro solo se è stato fornito il valore -Verbose.

ho guardato già nei seguenti documenti di aiuto, ma non ha trovato nulla di utile:
- aiuto about_Parameters
- help about_commonparameters

Inoltre, il parametro -WhatIf non funziona con Write-Verbose.

Grazie mille per le vostre risposte!

risposta

16

All'interno dello script controllare questo:

$PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent 
+0

Perfetto, questo è esattamente quello che stavo cercando! Grazie! – dwettstein

+0

@dwettstein Felice di aiutare! –

11

Disponibile anche: Verificare il parametro '$ VerbosePreference'. Se è impostato su 'SilentlyContinue', $ Verbose non è stato fornito nella riga di comando. Se è impostato su '$ Continua', puoi presumere che sia stato impostato.

vale anche per i seguenti altri parametri comuni:

Name       Value 
----       ----- 
DebugPreference    SilentlyContinue 
VerbosePreference    SilentlyContinue 
ProgressPreference    Continue 
ErrorActionPreference   Continue 
WhatIfPreference    0 
WarningPreference    Continue 
ConfirmPreference    High 

Taken from an MSDN blog page from long ago... quindi dovrebbe essere rilevante relativamente vecchie versioni di PowerShell. Vedi anche "Get-Help about_CommonParameters" in Powershell v4.

+0

Questo è il modo in cui sono andato con: '$ verbose = $ VerbosePreference -ne 'SilentlyContinue'' – primfaktor

0

Più in generale: poiché è possibile specificare -Verbose: $ false sulla riga di comando, il codice seguente gestisce il caso. Funziona anche per qualsiasi altro parametro di commutazione:

$Verbose = $false 
if ($PSBoundParameters.ContainsKey('Verbose')) { # Command line specifies -Verbose[:$false] 
    $Verbose = $PsBoundParameters.Get_Item('Verbose') 
Problemi correlati