..

ветамкак этот и по собственному опыту 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'], Или есть другие, желательно более короткие, пути? Это довольно грязно, если функции ведут себя по-разному в зависимости от того, являются ли они частью модуля или с точечным источником.

Ответы на вопрос(1)

Ваш ответ на вопрос