У меня есть модуль PowerShell, который инкапсулирует ряд часто используемых бизнес-функций. Его обычно не вызывают из консоли; скорее, его функции вызываются автоматическими сценариями развертывания и управления, которые импортируют модуль.Прохождение через -Вербосовое состояние командлетов модуля
Модуль включает функцию регистрации, которая записывает и в централизованное место ведения журнала. Я также хотел бы подключиться к функции Write-Verbose для записи на консоль.
#'Start Script.ps1
#'----------------
import-module Corporate
Write-Logger 'Foo'
Мое ограничение в том, что - внутри модуля корпоративной PowerShell - мне нужно, чтобы определить, был ли Script.ps1 вызван с параметром -verbose. В идеале, я хотел бы, чтобы код определения полностью находился внутри самого модуля.
Вот пример:
[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
Сохранить выше как Test.ps1. При вызове из консоли:
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
Как вы можете видеть, переменная $ VerbosePreference не доступна внутри модуля. Есть ли способ извлечения из модуля, вызван ли вызывающий скрипт флагом -Verbose.
Вы можете объявить параметр switch для скрипта, а затем в зависимости от его значения установить некоторую глобальную переменную. Также вы можете установить/отключить переменную среды и проверить ее значение в командлете. – Ievgen