PowerShell: $PSBoundParameters недоступны в контексте отладки

Если я попытаюсь проверить автоматическую переменную PowerShell $PSBoundParameters во время сеанса отладки PowerShell (например, PowerShell ISE или Quest PowerGUI Script Editor), я не могу получить его значение. Однако, если я просто разрешаю функции эхо-объекта $PSBoundParameters к конвейеру, он отображает, как ожидалось.

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

Ответ 1

Кажется, для меня это работает, если я назначу его переменной и посмотрю на переменную следующим образом:

function Test-PSBoundParameters {
    [CmdletBinding()]
    param (
        [string] $Bar
    )

    $test = $PSBoundParameters
    $test | select *
}

Test-PSBoundParameters -Bar "a"

Я не смог проверить $PSBoundParameters во время отладки, но я мог проверить $test. Я не уверен, почему это так, но по крайней мере вы можете использовать это как работу.

Ответ 2

Вот почему, из about_debuggers:

Displaying the Values of script Variables

While you are in the debugger, you can also enter commands, display the
value of variables, use cmdlets, and run scripts at the command line.

You can display the current value of all variables in the script that is
being debugged, except for the following automatic variables:

  $_
  $Args
  $Input
  $MyInvocation
  $PSBoundParameters

If you try to display the value of any of these variables, you get the
value of that variable for in an internal pipeline the debugger uses, not
the value of the variable in the script.

To display the value these variables for the script that is being debugged,
in the script, assign the value of the automatic variable to a new variable.
Then you can display the value of the new variable.

Ответ 3

У вас может быть больше информации о $PSBoundParameters в about_Automatic_Variables. Эта переменная имеет значение только в области, где объявляются параметры. Что касается PowerGui, я могу увидеть значения этого var во время отладки, как вы можете видеть ниже.

enter image description here

Вы ничего не видите внутри [DBG], потому что вы находитесь в промежуточном месте из-за функции без аргументов.