У меня возникла странная проблема, когда у меня возникает другое поведение при установке «Set-PSDebug -Trace 2».Powershell «Set-PSDebug -Trace 2» вызывает неожиданные результаты
Я проследил его до переключателя заявление не исполняющего должным образом и был в состоянии воспроизвести его на Powershell V3, но не на Powershell V2 или Powershell V1 (работает как ожидалось)
Возьмем следующую простую функцию:
function DoTest {
$result = "Switch Case Not Executed"
$VendorName = "Microsoft"
switch ($VendorName)
{
"Microsoft" { $result = "Switch Case Executed" }
}
Write-host "Switch: $($VendorName) -> $result"
}
Теперь выполните следующее:
#Works as expected
Set-PSDebug -Off; DoTest;
#Doesn't work as expected
Set-PSDebug -Trace 2; DoTest;
Результаты на шикарном V3 с PSDebug Трассировка
DEBUG: 3+ Set-PSDebug -Trace 2; >>>> DoTest;
DEBUG: 1+ function DoTest >>>> {
DEBUG: ! CALL function 'DoTest'
DEBUG: 2+ >>>> $result = "Switch Case Not Executed"
DEBUG: ! SET $result = 'Switch Case Not Executed'.
DEBUG: 3+ >>>> $VendorName = "Microsoft"
DEBUG: ! SET $VendorName = 'Microsoft'.
DEBUG: ! SET $switch = 'Microsoft'.
DEBUG: 4+ switch (>>>> $VendorName)
DEBUG: ! SET $switch = ''.
DEBUG: 9+ >>>> Write-host "Switch: $($VendorName) -> $result"
DEBUG: 9+ Write-host "Switch: $(>>>> $VendorName) -> $result"
Switch: Microsoft -> Switch Case Not Executed
DEBUG: 11+ >>>> }
В шикарном 3-й версии, даже трассировка отладки указывает, что значение установлено, но, кажется, пропустить заявление переключатель полностью. Я даже попробовал Set-StrictMode
, и все работает нормально. Это только когда я включаю трассировку PSDebug. Предполагается ли это поведение?
Thanks @Eris! Я открыл ошибку с помощью [Microsoft Connect] (https://connect.microsoft.com/PowerShell/feedback/details/800248/set-psdebug-trace-2-on-powershell-v3-does-not-execute -switch-statements-correct-switch-is-null) –
У нас была аналогичная проблема с использованием 'Set-PSDebug -Trace 1' и foreach. Если мы делаем 'foreach (var $ item в $ something)', то итерации не происходит. Работает отлично с '$ something ' ForEach-Object' ... хотя. Мы использовали трассировку для оценки охвата кода на автоматизированных тестах - теперь это сильно нарушено при использовании PowerShell 3 ... – MrKWatkins