PowerShell: $ PSBoundParameters недоступен в контексте отладки - PullRequest
11 голосов
/ 27 января 2012

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

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

Ответы [ 3 ]

18 голосов
/ 01 мая 2012

Вот почему, из 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.
5 голосов
/ 27 января 2012

Мне кажется, что это работает, если я назначу ее переменной и посмотрю на переменную так:

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

    $test = $PSBoundParameters
    $test | select *
}

Test-PSBoundParameters -Bar "a"

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

2 голосов
/ 29 января 2012

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

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...