..
ветамкак этот и по собственному опыту Powershell может позаботиться о автоматическом распространении -Verbose (и -Debug), что очень удобно. Однако это перестает работать, когда функции, которые я хочу распространить многословие, находятся в модуле. Код, используемый для тестирования этого:
Создайте каталог с именемMod
где-то, предположим, в c :, и добавить 2 файла:
файлc:\Mod\Functions.ps1
:
function Show-VerbosityB { [cmdletbinding()]Param()
Write-Output "Show-VerbosityB called"
Write-Verbose "Show-VerbosityB is Verbose"
}
файлc:\Mod\Mod.psd1
:
@{
ModuleVersion = '1.0.0.0'
NestedModules = @('Functions.ps1')
FunctionsToExport = @('*-*')
}
Теперь напишите основной сценарий, скажем,c:\Foo.ps1
:
Import-Module c:\Mod
function Show-VerbosityA { [cmdletbinding()]Param()
Write-Output "Show-VerbosityA called"
Write-Verbose "Show-VerbosityA is Verbose"
}
function Show-Verbosity { [cmdletbinding()]Param()
Write-Output "Show-Verbosity called"
Write-Verbose "Show-Verbosity is Verbose"
Write-Output "Testing propagation"
Show-VerbosityA
Show-VerbosityB
}
Show-Verbosity -Verbose
Результаты в
PS> . C:\Foo.ps1
Show-Verbosity called
VERBOSE: Show-Verbosity is Verbose
Testing propagation
Show-VerbosityA called
VERBOSE: Show-VerbosityA is Verbose
Show-VerbosityB called
Почему Write-Verbose в функции модуля пропущен, почему распространение не ведет себя так, как для Show-VerbosityA? (Если вместо импортирования модуля я просто использую точечный источник Functions.ps1, строкаVERBOSE: Show-VerbosityB is Verbose
печатается). Я мог бы сделать руководство по распространению, например, призваниеShow-VerbosityB -Verbose:$PSBoundParameters['Verbose']
, Или есть другие, желательно более короткие, пути? Это довольно грязно, если функции ведут себя по-разному в зависимости от того, являются ли они частью модуля или с точечным источником.