GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Push locals of automatic variables to 'DottedScopes' when dotting script cmdlets by daxian-dbw · Pull Request #4709 · PowerShell/PowerShell

Conversation

@daxian-dbw

@daxian-dbw Dongbo Wang (daxian-dbw) commented Aug 30, 2017

Copy link
Copy Markdown
Member

Fix #4688

When dotting a script cmdlet, the locals of automatic variables from the PSScriptCmdlet is not set up in the current scope before parameter binding. The fix is to push the locals in CommandProcessor.OnSetCurrentScope and pop them in CommandProcessor.OnRestorePreviousScope, which will be called from SetCurrentScopeToExecutionScope and RestorePreviousScope respectively.

Summary of changes:

  1. When a new local scope is used, currently we set the locals for CommandProcessor right before parameter binding (in BindCommandLineParametersNoValidation); we set the locals for ScriptCommandProcessor in Prepare. I moved both to the constructor, right after the new scope is created so that the code is more consistent.

  2. In CmdletParameterBinderController.cs, we set up the PSBoundParameters and MyInvocation variables in HandleCommandLineDynamicParameters again, which I think is unnecessary because this method is only called from BindCommandLineParametersNoValidation, where the setup is done for the first time.

  3. Currently, the locals will be set for dotted script cmdlet in EnterScope() and ExitScope(). Now, that logic is moved to OnSetCurrentScope and OnRestorePreviousScope of CommandProcessor. This not only makes sure that locals are set before parameter binding, but also is consistent with the ScriptCommandProcessor.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@daxian-dbw
Push locals of automatic variables to 'DottedScopes' when dotting scr…
0db62b1
…ipt cmdlets
@daxian-dbw Dongbo Wang (daxian-dbw) self-assigned this Aug 30, 2017
@daxian-dbw
Dongbo Wang (daxian-dbw) requested a review from Jason Shirk (lzybkr) August 30, 2017 20:37
@daxian-dbw
Dongbo Wang (daxian-dbw) requested review from Bruce Payette (BrucePay) and sergei (vors) as code owners August 30, 2017 20:37
@msftclas Microsoft Contribution License Agreements (msftclas) added the cla-not-required label Aug 30, 2017
vors
sergei (vors) approved these changes Sep 1, 2017
View reviewed changes
@daxian-dbw

Dongbo Wang (daxian-dbw) commented Sep 2, 2017

Copy link
Copy Markdown
Member Author

sergei (@vors) Thanks!
Jason Shirk (@lzybkr) can you please take a look when you have time?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@daxian-dbw
Dongbo Wang (daxian-dbw) merged commit 41f12b1 into PowerShell:master Sep 6, 2017
@daxian-dbw
Dongbo Wang (daxian-dbw) deleted the dotsource branch September 6, 2017 17:25
@lzybkr Jason Shirk (lzybkr) mentioned this pull request Sep 15, 2017
Dot sourcing a function does not allow $MyInvocation to be used as a default parameter #4840
Closed
ViktorDronov
Viktor Dronov (ViktorDronov) approved these changes Jan 9, 2024
View reviewed changes
Thatgfsj (Thatgfsj) pushed a commit to Thatgfsj-contribs/PowerShell that referenced this pull request Aug 6, 2026
@daxian-dbw
Push locals of automatic variables to 'DottedScopes' when dotting scr…
5bb2b0b
…ipt cmdlets (PowerShell#4709)

When dotting a script cmdlet, the locals of automatic variables from the `PSScriptCmdlet` is not set up in the current scope before parameter binding. The fix is to push the locals in `CommandProcessor.OnSetCurrentScope` and pop them in `CommandProcessor.OnRestorePreviousScope`, which will be called from `SetCurrentScopeToExecutionScope` and `RestorePreviousScope` respectively.

Summary of changes:
1. When a new local scope is used, currently we set the locals for `CommandProcessor` right before parameter binding (in `BindCommandLineParametersNoValidation`); we set the locals for `ScriptCommandProcessor` in `Prepare`. I moved both to the constructor, right after the new scope is created so that the code is more consistent.

2. In `CmdletParameterBinderController.cs`, we set up the `PSBoundParameters` and `MyInvocation` variables in `HandleCommandLineDynamicParameters` again, which I think is unnecessary because this method is only called from `BindCommandLineParametersNoValidation`, where the setup is done for the first time.

3. Currently, the locals will be set for dotted script cmdlet in `EnterScope()` and `ExitScope()`. Now, that logic is moved to `OnSetCurrentScope` and `OnRestorePreviousScope` of `CommandProcessor`. This not only makes sure that locals are set before parameter binding, but also is consistent with the `ScriptCommandProcessor`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@lzybkr Jason Shirk (lzybkr) Awaiting requested review from lzybkr
@BrucePay Bruce Payette (BrucePay) Awaiting requested review from BrucePay
2 more reviewers
@vors sergei (vors) vors approved these changes
@ViktorDronov Viktor Dronov (ViktorDronov) ViktorDronov approved these changes
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@daxian-dbw Dongbo Wang (daxian-dbw)

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

$PSScriptRoot is not populated when used in a default value for a non-mandatory script parameter

Uh oh!

There was an error while loading. Please reload this page.

4 participants

@daxian-dbw @vors @ViktorDronov @msftclas
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.