Модуль не управляет Писать-отладкой, когда - Отладка была передана в к запросу сценария

У меня есть модуль, у которого есть следующая функция.

Тест-Module.psm1

function Do-Stuff
{
    [CmdletBinding()]
    param($Stuff)
    Write-Debug 'Doing stuff!'
    Write-Host $Stuff
}

И у меня есть сценарий, который импортирует модуль.

Тест-Script.ps1

[CmdletBinding()]
param($Stuff)

Import-Module ./Test-Module.psm1

Write-Host 'About to do stuff.'
Do-Stuff -Stuff $Stuff
Write-Host 'Just did some stuff.'

Но когда я называю сценарий - флаг Отладки не уважают в функции-Материала.

PS > .\Test-Script.ps1 -Stuff 'foobar'
About to do stuff.
foobar
Just did some stuff.

Я вспоминаю наблюдение чего-то на StackOverflow недавно, который обсудил эту самую проблему и предположил, что у вас мог быть модуль, исследуют параметры через стек вызовов, чтобы определить, должно ли это осуществить отладку или нет. Я не могу найти его теперь, хотя и я не уверен, что понял, как осуществить в то время так или иначе.

Как я могу осуществить что-то вроде этого или что-то другое, что достигает той же самой цели.

0
nl ja de

2 ответы

один путь может состоять в том, чтобы добавить этот код сверху вас модуль:

if ((get-pscallstack |select -last 2 |select -expand arguments -first 1) -match "verbose"){$verbosepreference="continue"}
if ((get-pscallstack |select -last 2 |select -expa arguments -first 1) -match "debug"){ $debugpreference="continue"}
2
добавлено
просто отредактированный мой ответ
добавлено автор Loïc MICHEL, источник
Спасибо @Graimer, i' ve не сказал, что я на самом деле использовал бы это;)
добавлено автор Loïc MICHEL, источник
you' приветствие ре, была хорошая проблема, даже если вы указываете мне на правильное направление (стек вызовов)
добавлено автор Loïc MICHEL, источник
Я думаю he' s выяснение, как автоматизировать его так он doesn' t должны изменить сценарий.
добавлено автор Frode F., источник
semms, чтобы работать, большая находка! лично it' s "слишком грязный" для меня. использовали бы эти 2 секунды, чтобы добавить - Отладка: $Debug - Многословный: $Verbose к моим требованиям:)
добавлено автор Frode F., источник
Точно @Graimer.
добавлено автор Quincy Bowers, источник
Но что относительно того, когда вы хотите повернуться спиной прочь? Тогда вы hvae, чтобы возвратиться и удалить его. Я думаю, что это будет решением, которое я искал. I' у ll есть время, чтобы осуществить и проверить завтра. Спасибо!
добавлено автор Quincy Bowers, источник
Принятый и добавленный моя фактическая реализация. Спасибо очень много @Kayasax
добавлено автор Quincy Bowers, источник

Простое решение: добавьте таможенный выключатель отладки.

Тест-Script.ps1

[CmdletBinding()]
param($Stuff, [switch]$UseDebug)

Import-Module ./Test-Module.ps1

Write-Host 'About to do stuff.'
Do-Stuff -Stuff $Stuff -Debug:$UseDebug
Write-Host 'Just did some stuff.'

Complicated solution: read the following SO question

0
добавлено
никогда не слышал об этом, но по крайней мере теперь я получаю уведомления на обновлениях здесь. таким образом, если it' s верный, я мог бы изучить его скоро также =),
добавлено автор Frode F., источник
Это, конечно, работало бы. Но я хотел бы постараться не добавлять дополнительные флаги к требованию-Материала. Я уверен, что недавно прочитал другое решение, у которого был модуль, осматривая стек вызовов, чтобы определить, присутствовал ли - Отладка или - Многословный параметр. Я буду использовать это решение, если окажется, что я имею к все же.
добавлено автор Quincy Bowers, источник
PowerShellRus - о Powershell (и не только) на русском
PowerShellRus - о Powershell (и не только) на русском
418 участник(ов)

О Powershell на русском

PowerShell Pro
PowerShell Pro
75 участник(ов)

Чат, посвящённый языку PowerShell Правила чата: нет оффтопу, спаму, оскорблениям. Будьте вежливы к коллегам. Приятного общения! Книги можно найти по тегу #books