Ich habe ein PowerShell-Modul, das eine Reihe von häufig verwendeten Business-Funktionen kapselt. Es wird normalerweise nicht von der Konsole aus aufgerufen. Vielmehr werden seine Funktionen von automatisierten Bereitstellungs- und Verwaltungsskripten aufgerufen, die das Modul importieren.Durchlauf durch -Verbose-Status zu Modul-Cmdlets
Das Modul enthält eine Protokollierungsfunktion, die in einen zentralen Protokollspeicherort schreibt. Ich möchte auch in die Write-Verbose-Funktionalität einhaken, um auch auf die Konsole zu schreiben.
#'Start Script.ps1
#'----------------
import-module Corporate
Write-Logger 'Foo'
Meine Einschränkung ist, dass - von den im Corporate Powershell-Modul - ich brauche, um zu bestimmen, ob Script.ps1 mit dem -Verbose Parameter aufgerufen wurde. Im Idealfall möchte ich den Bestimmungscode vollständig innerhalb des Moduls selbst.
Hier ist ein Beispiel:
[CmdletBinding()]
Param()
New-Module -Name TempModule -ScriptBlock {
function Test-ModuleVerbose() {
[CmdletBinding()]
Param()
PROCESS {
$vb = ($PSCmdlet.MyInvocation.BoundParameters['Verbose'] -eq $true)
Write-Host ("1: Module verbose preference: " + ($PSCmdlet.MyInvocation.BoundParameters['Verbose'] -eq $true))
Write-Host ("2: Module verbose preference: " + $Script:VerbosePreference)
Write-Host ("3: Module verbose preference: " + $VerbosePreference)
}
}
} | Out-Null
function Test-Verbose() {
[CmdletBinding()]
Param()
PROCESS {
Write-Host ("Verbose preference: $VerbosePreference")
Test-ModuleVerbose
}
}
Test-Verbose
Speichern Sie die oben als test.ps1. Wenn von der Konsole aufgerufen:
PS C:\temp> .\test.ps1
Verbose preference: SilentlyContinue
1: Module verbose preference: False
2: Module verbose preference:
3: Module verbose preference: SilentlyContinue
PS C:\temp> .\test.ps1 -Verbose
VERBOSE: Exporting function 'Test-ModuleVerbose'.
VERBOSE: Importing function 'Test-ModuleVerbose'.
Verbose preference: Continue
1: Module verbose preference: False
2: Module verbose preference:
3: Module verbose preference: SilentlyContinue
Wie Sie sehen können, ist der $ VerbosePreference Variable von innerhalb des Moduls nicht zur Verfügung. Gibt es eine Möglichkeit, innerhalb des Moduls abzuholen, ob das aufrufende Skript mit dem Verben-Flag aufgerufen wurde.
Sie können Switch-Parameter für das Skript deklarieren und dann je nach Wert eine globale Variable festlegen. Sie können die Umgebungsvariable auch setzen/aufheben und ihren Wert im Cmdlet überprüfen. – Ievgen