KEMBAR78
Break action preference by KirkMunro · Pull Request #8205 · PowerShell/PowerShell · GitHub
Skip to content

Conversation

@KirkMunro
Copy link
Contributor

@KirkMunro KirkMunro commented Nov 8, 2018

PR Summary

Added ActionPreference.Break. This new ActionPreference value allows for scripters to break into the debugger anytime a message is to be sent to a stream. It can be used for specific commands via the -ErrorAction or -WarningAction common parameters, or across scripts using one of the preference variables ($DebugPreference, $ErrorActionPreference, $InformationPreference, $ProgressPreference, $VerbosePreference, or $WarningPreference).

When a record for one of these message types is raised, if the corresponding preference variable is set to ActionPreference.Break, PowerShell will immediately enter the debugger and add the appropriate message record to the $PSDebugContext variable in the new Trigger property.

These changes also include the following:

  1. Updated Wait-Debugger so that it now enters the debugger on the Wait-Debugger command, rather than on the command following Wait-Debugger (which confuses users, especially if the next command is not in the same scope). This was necessary so that all commands to enter the debugger without a breakpoint use the same code. As a side benefit, the new UX is much more intuitive, and you can now enter the debugger using Wait-Debugger even if it is the last/only command in your script.
  2. Fix PS should reset $? to the value it had when it entered the debugger #9474.

PR Checklist

@rkeithhill
Copy link
Collaborator

rkeithhill commented Nov 8, 2018

Interesting idea but I would have expected this functionality to be part of Set-PSBreakpoint. Perhaps a new parameter set with a -StreamWrite parameter that takes an enum that identifies each stream. Not sure how useful the Output stream would be to break on as it would probably hit that breakpoint a lot. :-)

@KirkMunro
Copy link
Contributor Author

KirkMunro commented Nov 8, 2018

@rkeithhill That approach would be more complicated to implement. We already have a framework for message processing with ActionPreference variables and the common -ErrorAction and -WarningAction parameters. This is just additional message processing that extends that framework. It fits quite naturally into what is already there, and is intended to supercede ActionPreference.Inquire, which is antiquated and of questionable value (but can remain around as a museum artifact to remind us of how we could debug in PowerShell 1.0).

Plus for the most common use case, entering the debugger on error, possibly for a specific command that is deep in a call stack, you can either use -ErrorAction Break at the top level or set -ErrorAction on the specific command where you want to break using $PSDefaultParameterValues. No new breakpoint types were required, and based on personal experience evangelizing the debugger to the community and gathering feedback from the community, I think this approach will get much more use than a new Set-PSBreakpoint parameter set would. It's much more visual and easier to digest for scripters.

@rkeithhill
Copy link
Collaborator

All good points but consider that if Set-PSBreakpoint is used you pretty much get conditional & tracing breakpoints for free via the -Action parameter. :-)

@KirkMunro
Copy link
Contributor Author

Tracing isn't really an advantage in the case of stream messages though, is it? Messages provide that naturally (they are messages sent through a stream, after all). Also, with so many scripters who don't use the debugger, the simple UX that this provides feels like a win to me. But you're right, you don't get conditional breakpointing with this approach.

I was looking at this again this morning, and could add a new type of breakpoint so that either Set-PSBreakpoint or the new ActionPreference.Break value could be used to trigger breakpoints, with the former creating an explicit breakpoint which could be conditional, and the latter creating a non-conditional, implicit breakpoint that only exists during the invocation, if that approach is preferred.

@KirkMunro
Copy link
Contributor Author

@PaulHigin Even though this is only marked WIP for now (mostly because I want to make sure I have adequate test coverage once this is all hashed out), I'd really like your thoughts on what I've done here so far.

Copy link
Contributor

@PaulHigin PaulHigin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I like this a lot. Please be sure to test with remote debugging, debugging runspaces (nested), job debugging, etc. We have tests for this, but they haven't been ported yet because they are c# tests requiring "friend" test assemblies. But we should add test hooks at some point. For the short term, manual testing is probably Ok.

@PaulHigin
Copy link
Contributor

Regarding ActionPreference versus new breakpoint type, I think I prefer the current ActionPreference. This is different than breakpoints, more like Wait-Debugger, and I feel adding a new breakpoint type that really isn't a breakpoint could be confusing. OTOH it would be nice to also include a "break on exception (terminating error)", and I am not sure how that would be set ... breakpoint type or new built-in variable. It is worth thinking about and discussing.

@iSazonov
Copy link
Collaborator

iSazonov commented Nov 9, 2018

At first look users can understand that ActionPreference.Break breaks/exits the script. What about ActionPreference.BreakToDebugger, ActionPreference.JumpToDebugger, or ActionPreference.Debug?

If I remember right there is a problem with propagating the preference variables ($DebugPreference, $ErrorActionPreference, $InformationPreference, $ProgressPreference, $VerbosePreference, $WarningPreference) to local and module scopes. This may somehow affect this enhancement.

@KirkMunro
Copy link
Contributor Author

KirkMunro commented Nov 9, 2018

@iSazonov Regarding the suggestion for ActionPreference.Debug, I was originally debating between that and Break, but decided Debug wasn't appropriate because it could easily be confused with -Debug or $DebugPreference, which are entirely different.

I also thought about the possible confusion between Break and the break statement, but felt that wasn't an issue because we also have ActionPreference.Continue, which could be confused with the continue statement, but they are entirely different from one another. Users need to understand that these ActionPreference values are about actions taken by the engine during the execution of a script, controlling how messages are handled, and not the same thing as keywords used for flow control within a loop in a script.

Can you share more details about the problem with propagating preference variables that you mentioned so that I'm aware of the details?

@vexx32
Copy link
Collaborator

vexx32 commented Nov 9, 2018

@KirkMunro My understanding of it is that pref variables ($ErrorActionPreference etc) are not correctly passed between modules.

For example:

  • You write module A which has a function that calls Remove-Item (which is part of one of the default modules).
  • You load both modules and set $ErrorActionPreference = 'Continue'
  • You then try to call the function from module A with preference variable set

Result: module A sees the value you set, but Remove-Item will not see the variable.

However, it is my understanding that it manages to work correctly when (in the above example) calling a command from module A with -ErrorAction parameter.

Please correct me if my understanding is lacking @iSazonov 😄

@iSazonov
Copy link
Collaborator

iSazonov commented Nov 9, 2018

@vexx32 Thanks! You are right.
@KirkMunro Thanks for clarify. It'll be useful for PowerShell Committee considerations.
The issue about preference variables is #4568 .

@iSazonov iSazonov added the Review - Committee The PR/Issue needs a review from the PowerShell Committee label Nov 9, 2018
@joeyaiello
Copy link
Contributor

@PowerShell/powershell-committee summary:

@KirkMunro could you elaborate more on your reasoning for not adding this functionality to ActionPreference.Inquire? (Overall, we agree that this is useful behavior, and some kind of method on ActionPreference is the right approach.)

Given a concern about the proliferation of trivial type accelerators, instead of adding a new accelerator, we should just fix our tab completion to complete the same way that parameters like -ErrorAction complete. (Unless there's another reason for that change that we're missing?)

As for the Wait-Debugger change, everyone is in favor. 😊

@joeyaiello joeyaiello added Committee-Reviewed PS-Committee has reviewed this and made a decision and removed Review - Committee The PR/Issue needs a review from the PowerShell Committee labels Nov 15, 2018
@KirkMunro
Copy link
Contributor Author

KirkMunro commented Nov 15, 2018

Great questions @joeyaiello. Answers below.

  1. ActionPreference.Break is explicit. It allows scripts to tell PowerShell they want to enter the debugger under certain conditions, just like they can by setting up breakpoints. ActionPreference.Inquire is a prompt for the end user, to which they would have to provide a reply, and then debug, when they could simply choose to continue execution when they enter the debugger if they don't want to debug at that point. If they're unsure, they need to be in the debugger anyway to look around, view where they are in the script, etc., so it made much more sense to me to simply bring users into the debugger by providing them with an explicit choice they make at execution time rather than asking them during the running of a script. Also, since PowerShell had a debugger added to it in v2, I can't think of one person who uses or promotes the use of ActionPreference.Inquire. If someone else gave me break functionality behind the question generated by ActionPreference.Inquire, I would be inclined to add ActionPreference.Break anyway. Last, there is PR Debug parameter now sets debugpreference to continue #8195, which removes the only built-in use of ActionPreference.Inquire that I know of in PowerShell, so that option feels pretty legacy at this point. All of that said, if the PowerShell team would like ActionPreference.Inquire to have a Break option in place of the option to Enter a nested prompt, I wouldn't be opposed to adding it to at least make it an option for folks who might want such functionality.

  2. So you're suggesting have tab completion work for variable assignment like it does for parameter values, such that a user could type in $ErrorActionPreference = '<tab>, and be presented with the values they can use? Yeah, ok, that could work. I still think it's useful to learn/understand the type behind the *Preference variables though, and as far as script readability/scanning goes, $ErrorActionPreference = [ActionPreference]::Break is a better way to write scripts IMHO than $ErrorActionPreference = 'Break'. That said, if you folks don't want the accelerator, I can take it out. I really think it is much easier to identify in scripts though, and helps users learn what is really happening much more than assigning those values to a string.

  3. I know, right? I was really happy to work that one out.

@KirkMunro
Copy link
Contributor Author

KirkMunro commented Nov 15, 2018

One more thought regarding the "proliferation of trivial type accelerators": what if PowerShell automatically worked as if you had invoked the equivalent of the snippet below at the top of every script/script module?

using namespace System.Management.Automation
using namespace System.Management.Automation.Language
using namespace System.Management.Automation.Runspaces

I think that, plus type acceleration for aliases/shorthand type names and outliers that are in namespaces from which you only care about a few types, would make working with the .NET side of PowerShell much easier. Is there a downside to automatically using some core namespaces that are among the most frequently used in PowerShell?

Copy link
Member

@daxian-dbw daxian-dbw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine not making the ActionPreference.Break support an experimental feature.
It's doable if we really want, by making the -ErrorAction, -WarningAction and preference variables not accept the Break value when the feature is disabled, but I don't think that will really provides a useful experience.

Now we just need the committee's decision on the new accelerator.

@KirkMunro
Copy link
Contributor Author

@daxian-dbw Not directly related to this PR being merged, I have a question about experimental features. Is the experimental part of a feature strictly defined by interface changes? For example, with this PR, it adds a new ActionPreference enumerated value. As you point out, we can't hide the new enumerated value today, but we could show a message indicating it is experimental if it is used in any -*Action common parameter, or if it is assigned to any *Preference variable that accepts an ActionPreference, being sure to check for string assignments as well as enumerated value assignments. The question I keep coming back to with such an approach is: what's the value in having that be experimental, because all that does it put some limitations on the surface, while the plumbing underneath would have been changed regardless. If 90% of a PR is simply applied in a merge and integrated into the runtime, and 10% of the PR (the user-facing interface) is marked as experimental:

  1. Is there value in that?
  2. Isn't that misleading for end users, because if the runtime changes regardless of whether they have an experimental feature enabled or not, then I don't know that's very apparent.

Contrast that with a new cmdlet that experimental or a new parameter/parameter set on a cmdlet that is experimental, where it is much easier to isolate the experimental code such that it doesn't do anything at all when the experimental feature is disabled.

This may be a better side-bar discussion, but it's something I find very confusing and it's the key point that makes me question the value of experimental features, when the bulk of the change is applied regardless...

@daxian-dbw
Copy link
Member

Is the experimental part of a feature strictly defined by interface changes?

No, it's not. It's about the functionality/behavior before and after introducing a new feature.
Technically, putting a feature behind an experimental feature should mean that when the feature is disabled, PowerShell behaves exactly as before the feature was introduced.
Take this PR as an example, yes the runtime code has been changed to support the Break action, but when Break is not used, PowerShell should behavior exactly as before this PR -- namely, the runtime code changes shouldn't caused any behavior change to the existing behaviors (no breaking changes).

  1. Is there value in that?
  2. Isn't that misleading for end users, because if the runtime changes regardless of whether they have an experimental feature enabled or not, then I don't know that's very apparent.

For changes like this PR -- mostly updating engine code that are hard to co-exist with the old engine code, I personally think it shouldn't be targeted as an experimental feature. (if the engine code changes caused any change in existing behavior, it will be noticed too even with the feature enabled).
Changes like this should be heavily reviewed at design/implementation phase (dogfooded by reviewers), and if decide to accept, then accept directly as an official feature.
I'm not saying other experimental features with less engine code changes would have a lower bar for acceptance. We always have a high bar for feature changes, but the changes like this PR should have an even higher bar.

@KirkMunro
Copy link
Contributor Author

Thanks for that reply, @daxian-dbw, that was helpful.

Now we just need the committee's decision on the new accelerator.

Does @SteveL-MSFT's reply here satisfy that need? Or does this still require being put in front of the committee again?

@daxian-dbw
Copy link
Member

Does @SteveL-MSFT's reply here satisfy that need? Or does this still require being put in front of the committee again?

Steve's opinion is very important for driving the committee's conclusion, but we still need the committee's approval on this. We're having a meeting this afternoon, so it should be done today :)

@SteveL-MSFT
Copy link
Member

@KirkMunro to help make the @PowerShell/powershell-committee meetings more efficient, we're trying to add individual opinions on items for review rather than having the discussion entirely within the meeting. So don't be surprised if you start seeing more of this.

@SteveL-MSFT
Copy link
Member

@PowerShell/powershell-committee reviewed this and do not support adding the type accelerator as [actionp<tab> is a similar experience to the accelerator to resolve the tab-complete concern. In general, expectation is that type accelerators should exist for types that are highly used which isn't the case for this pref variable.

@joeyaiello
Copy link
Contributor

joeyaiello commented Aug 21, 2019

Just to add a little more context: we don't want to open the doors for more low-use type accelerators in the future. And in my opinion, "[actionpreference]" is just as difficult to get right sans tab as "SilentlyContinue". I'm sure there's more out there that I'm not aware of, but I'm also not at all a fan of an all-lowercase, two-word accelerator like that. Accelerators like "[string]" and "[int]" fit a lot better with what folks are used to seeing from a non-PS type perspective.

@KirkMunro
Copy link
Contributor Author

KirkMunro commented Aug 22, 2019

Just to add a little more context: we don't want to open the doors for more low-use type accelerators in the future. And in my opinion, "[actionpreference]" is just as difficult to get right sans tab as "SilentlyContinue". I'm sure there's more out there that I'm not aware of, but...

@joeyaiello I removed the accelerator, but I disagree with the committee decision on this and will point a few things out highlighting why I disagree:

  1. For string enumerated values you only get tab complete when you use them within the -*Action parameters. You don't get tab complete when you assign a string value to one of the $*Preference variables, which is commonly done in scripts, and that's where typos can occur. Those typos only get caught in the global scope where those variables are strongly typed, but you never use those variables in the global scope. Those are the scenarios where I think having an accelerator adds value for the community: when you use the preference variables in scripts or functions or modules.
  2. I disagree that action preference variables are low use -- I've seen it used a lot, and I believe that an accelerator would get quite a bit of use in scripts if it was available.
  3. When it comes to strings in scripts, they all look the same. Enumerated values look different. While it is very convenient to be able to pass a string into a parameter that takes an enumerated value, IMHO it is a little too convenient to be able to assign a string to a variable that is supposed to represent an enumerated value, because one string looks like another, and ideally if I'm reviewing code I really want use of $*Preference variables to pop out. For me, assigning those variables to the full enumerated value makes that easier, but seeing the full name seems unnecessary/overkill, hence the desire for a type accelerator here.

I'm also not at all a fan of an all-lowercase, two-word accelerator like that.

I only made it all lowercase to follow the format of other accelerators. My preference would have been for an [ActionPreference] accelerator, but none of the other existing accelerators that have multiple "words" use uppercase in their names.

All of this aside, the accelerator is out and this PR is ready for merge.

Copy link
Member

@daxian-dbw daxian-dbw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The updates about reverting actionpreference accelerator look good to me.

@iSazonov
Copy link
Collaborator

@KirkMunro Please update the PR description.

@KirkMunro
Copy link
Contributor Author

@iSazonov Done.

@daxian-dbw daxian-dbw merged commit 8b9f412 into PowerShell:master Aug 23, 2019
@KirkMunro KirkMunro deleted the break-action-preference branch August 23, 2019 17:37
kaypeter87 added a commit to kaypeter87/PowerShell that referenced this pull request Sep 3, 2019
* Build(deps): Bump Microsoft.PowerShell.Archive from 1.2.2.0 to 1.2.3.0 in /src/Modules (PowerShell#9593)

* Support line continuance with pipe at the start of a line (PowerShell#8938)

Expands line continuance for pipelines to allow lines to continue automatically without backticks with the pipe symbol at the start of a line.
This adds to the existing functionality where pipes can be used to continue lines by placing them at the end of a line.

* Fix use of unicode ellipsis in xml (PowerShell#9589)

* Updating committee membership (PowerShell#9577)

* Build(deps): Bump System.Data.SqlClient from 4.6.0 to 4.6.1 (PowerShell#9601)

* Build(deps): Bump PowerShellGet from 2.1.2 to 2.1.3 in /src/Modules (PowerShell#9600)

* Build(deps): Bump Microsoft.Windows.Compatibility from 2.0.1 to 2.1.1 (PowerShell#9605)

* Build(deps): Bump NJsonSchema from 9.13.37 to 9.14.1 (PowerShell#9616)

Bumps [NJsonSchema](https://github.com/rsuter/NJsonSchema) from 9.13.37 to 9.14.1.
- [Release notes](https://github.com/rsuter/NJsonSchema/releases)
- [Commits](https://github.com/rsuter/NJsonSchema/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>

* Convert windows CI to stages (PowerShell#9607)

* Switch from BMP to PNG for graphical MSI installer assets (PowerShell#9606)

This breaks rendering of images for Windows 7 and Server 2008R2,
but it's required for accessibility purposes so that the High
Contrast Black theme renders text correctly for accessibility.
(Unfortunately, BMP does not support transparency.)

* Add checkbox to PR checklist for experimental feature use (PowerShell#9619)

* Make sure we always return an object in command searcher (PowerShell#9623)

* Remove Workflow from PSSessionType (PowerShell#9618)

Remove PSSessionType and IsWorkflowConfigurationType()

* Port PowerShell to .NET Core 3.0 (PowerShell#9597)

* Attributes.cs - Style / Formatting Fixes (PowerShell#9625)

* Update README and metadata.json (PowerShell#9624)

* Update version tests to use NextReleaseVersion from metadata.json (PowerShell#9646)

* Build(deps): Bump PackageManagement from 1.3.2 to 1.4 in /src/Modules (PowerShell#9650)

* Build(deps): Bump PackageManagement from 1.3.2 to 1.4 in /src/Modules

Bumps PackageManagement from 1.3.2 to 1.4.

Signed-off-by: dependabot[bot] <support@dependabot.com>

* Update vNext release branches in dependabot config (PowerShell#9658)

* Build(deps): Bump Microsoft.CodeAnalysis.CSharp from 3.0.0 to 3.1.0 (PowerShell#9653)

* Disable the debugger when in system lock-down mode (PowerShell#9645)

Disable the debugger when in system lock-down mode

Fixing master for CVE-2019-0733

* Build(deps): Bump PowerShellGet from 2.1.3 to 2.1.4 in /src/Modules (PowerShell#9691)

* Run Start-PSBootStrap in Code Coverage build to install .NET SDK (PowerShell#9690)

* Merged PR 8504: Fix syncing modules from powershell gallery by normalizing version numbers

Fix syncing modules from powershell gallery by normalizing version numbers and added additional logging.

* Fix daily `CodeCoverageAndTest` build by explicitly calling `Start-PSBootStrap` (PowerShell#9724)

* Merged PR 8510: Update the target framework for reference assemblies to netcoreapp3.0

Update the target framework for reference assemblies to netcoreapp3.0

* Merged PR 8512: Update version for SDK tests and Microsoft.PowerShell.Native package

Update version for SDK tests and Microsoft.PowerShell.Native package

* Pin version of netDumbster to 2.0.0.4 (PowerShell#9748)

* Update the target framework for reference assemblies to netcoreapp3.0 (PowerShell#9747)

Update the target framework for reference assemblies to netcoreapp3.0

* Merged PR 8529: Add cleanup before building test package

Add cleanup before building test package

* Change log for release 6.2.1 (PowerShell#9760)

Changelog for 6.2.1 and fix spellings

* Change log 6.1.4 (PowerShell#9759)

* Update change log for 6.1.4

Update change log for 6.1.4

* Resolve conflicts

* Merged PR 8547: Fix the PowerShell version number in MSI packages

Fix the PowerShell version number in MSI packages

* Merged PR 8542: changelog draft

changelog draft

* Update README and metadata.json for 7.0.0-preview.1 release (PowerShell#9767)

* Increase timeout of NuGet job to workaround build timeout (PowerShell#9772)

* Code Cleanup: Tidy up scriptblock.cs (PowerShell#9732)

* Fix `Get-ChildItem -Path` with wildcard char (PowerShell#9257)

Unescape non-literal, non-glob path before existence checking.

* Build(deps): Bump Microsoft.ApplicationInsights from 2.9.1 to 2.10.0 (PowerShell#9757)

* Disable stale bot in favor of an internal bot that we can customize more (PowerShell#9785)

* Build(deps): Bump System.Net.Http.WinHttpHandler from 4.5.3 to 4.5.4 (PowerShell#9786)

* Use new string.ConCat() in Process.cs (PowerShell#9720)

* Build(deps): Bump NJsonSchema from 9.14.1 to 10.0.13 (PowerShell#9805)

* Support negative numbers in `-split` operator (PowerShell#8960)

* Fix use of `Start-Process http://bing.com` (PowerShell#9793)

* Improve whitespace for Parser tests (PowerShell#9806)

* Build(deps): Bump NJsonSchema from 10.0.13 to 10.0.14 (PowerShell#9843)

* Fix minor style issues come from last commits (PowerShell#9640)

* Support DSC compilation on Linux. (PowerShell#9834)

* Build(deps): Bump NJsonSchema from 10.0.14 to 10.0.15 (PowerShell#9854)

* Have console host not enter command prompt mode when using `Read-Host -Prompt` (PowerShell#9743)

`Read-Host` calls into `$Host.UI.Prompt()`.  However, this method is also used when the host prompts for mandatory parameters that aren't provided.  The method expects to be called when given a `FieldDescription` and if the input starts with `!` it enters `CommandPromptMode`.  In this mode, you can type `!?` to request help, for example.  However this mode is not something you can use via `Read-Host` (only if calling `$Host.UI.Prompt()` directly passing in a well constructed `FieldDescription`).  When using `Read-Host -Prompt`, the cmdlet creates a `FieldDescription` where the name is the prompt and the rest of the properties are empty.

The fix is that if `Label` is empty, we can assume it's being called from `Read-Host` rather than being called to prompt for a mandatory parameter and thus not enter `CommandPromptMode`.

* Add ability to pass `InitialSessionState` to the `ConsoleShell.Start` (PowerShell#9802)

* Build(deps): Bump NJsonSchema from 10.0.15 to 10.0.17 (PowerShell#9862)

* Add launchSettings.json for better out of box experience when using Visual Studio (PowerShell#9818)

* Build(deps): Bump NJsonSchema from 10.0.17 to 10.0.18 (PowerShell#9875)

* Add module to support Pester tests for automating debugger commands (stepInto, stepOut, etc.), along with basic tests (PowerShell#9825)

* Build(deps): Bump NJsonSchema from 10.0.18 to 10.0.19 (PowerShell#9885)

* Make `UseAbbreviationExpansion` and `TempDrive` official features (PowerShell#9872)

* Attempt to work around the zip download issue in Azure DevOps Windows CI (PowerShell#9911)

* Fix unix project mappings (PowerShell#9892)

* Update to use TSAv2 (PowerShell#9914)

* Use yarn to install global tools (PowerShell#9904)

* Build(deps): Bump PackageManagement from 1.4 to 1.4.1 in /src/Modules (PowerShell#9820)

Bumps PackageManagement from 1.4 to 1.4.1.

* Build(deps): Bump PackageManagement from 1.4.1 to 1.4.2 in /src/Modules (PowerShell#9918)

* Import-DscResource should allow to overwrite DSC built-in resources. (PowerShell#9879)

* Use the original precision (prior-dotnet-core-3) for double/fload-to-string conversion (PowerShell#9893)

.NET Core changes to return "shortest roundtrippable string" by default for the ToString() method of double and float types. This results in ToString() for double/float values sometimes return a string in 17-digit/9-digit precision format. This PR updated the double/float-to-string conversion in PowerShell to continue using the old precision specifier before the change in .NET Core 3.0.

* Build(deps): Bump PowerShellGet from 2.1.4 to 2.1.5 in /src/Modules (PowerShell#9933)

Bumps [PowerShellGet](https://github.com/PowerShell/PowerShellGet) from 2.1.4 to 2.1.5.
- [Release notes](https://github.com/PowerShell/PowerShellGet/releases)
- [Changelog](https://github.com/PowerShell/PowerShellGet/blob/development/CHANGELOG.md)
- [Commits](https://github.com/PowerShell/PowerShellGet/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Clean up the use of 'SetProfileRoot' and 'StartProfile' in ConsoleHost (PowerShell#9931)

* Clean up the use of 'SetProfileRoot' and 'StartProfile' in ConsoleHost
* Remove 'pwsh.pdb' from our component file list

* Update console startup and help url for PowerShell docs (PowerShell#9775)

* Fix minor CodeFactor style issues in ModuleCmdletBase (PowerShell#9915)

* Build(deps): Bump NJsonSchema from 10.0.19 to 10.0.20 (PowerShell#9954)

Bumps [NJsonSchema](https://github.com/rsuter/NJsonSchema) from 10.0.19 to 10.0.20.
- [Release notes](https://github.com/rsuter/NJsonSchema/releases)
- [Commits](https://github.com/rsuter/NJsonSchema/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Style fixes for CimAsyncOperations (PowerShell#9945)

* Improve release testing Docker images (PowerShell#9942)

* Remove some Travis-CI references (PowerShell#9919)

* Fix minor typos in code comments (PowerShell#9917)

* Indentation fixes in ci.psm1 (PowerShell#9947)

* Update readme gitter badge (PowerShell#9920)

* Display com method signature with argument names (PowerShell#9858)

* Display Duration when displaying `HistoryInfo` (PowerShell#9751)

* Remove dead code about 'IsTransparentProxy' (PowerShell#9966)

* Fix style issues from last commits (PowerShell#9937)

* Suppress sporadic exceptions from JumpList creation code (PowerShell#9928)

* Remove EtwActivity empty constructor and make minor style fixes (PowerShell#9958)

* Sync docs changes into the embedded help for pwsh (PowerShell#9952)

* Fix amazonlinux install script (PowerShell#9967)

* Fix wrong comparison in CertificateProvider (PowerShell#9987)

* Cleanup Parser tests (PowerShell#9792)


Co-Authored-By: Ilya <darpa@yandex.ru>

* Remove LCIDToLocaleName P/Invoke from GetComputerInfoCommand (PowerShell#9716)

- Remove LCIDToLocaleName P/Invoke with StringBuilder
- Reduce allocations by using GetCultureInfo to get cached CultureInfo
- Use UInt32.TryParse to parse Hex
- Minor cleanups after above changes

* Fix gulp versions (PowerShell#9916)

* Add quick steps for adding docs to cmdlets (PowerShell#9978)

* Cleanup: Use EndsWith(char) and StartsWith(char) (PowerShell#9994)

* Add test for `New-Item -Force` (PowerShell#9971)

* Allow methods to be named after keywords (PowerShell#9812)

* Move consts and methods to single CharExtensions class (PowerShell#9992)

* Build(deps): Bump ThreadJob from 1.1.2 to 2.0.1 in /src/Modules (PowerShell#10003)

* Code cleanup: use IndexOf(char) overload (PowerShell#9722)

- Use IndexOf(char) overload instead of IndexOf(string) to benefit from Ordinal search
- Replace IndexOf with Contains to get more understandable code
- Use StringComparison.Ordinal for ASCII chars

* Add automated RPM signing to release build (PowerShell#10013)

* Download latest version (6.2.0) of PSDesiredStateConfiguration nuget package. (PowerShell#9932)

* Update copyright symbol for NuGet packages (PowerShell#9936)

* Avoid the `int[]` and `int[,]` allocation when tokenizing line comments and matching wildcard pattern (PowerShell#10009)

- Reusing the same 2-dimensional integer array for processing line comments in the same Tokenizer.
- Use ArrayPool<int> in PatternPositionVisitor to avoid creating transient int[].

* Bump NJsonSchema from 10.0.20 to 10.0.21 (PowerShell#10017)

Bumps [NJsonSchema](https://github.com/rsuter/NJsonSchema) from 10.0.20 to 10.0.21.
- [Release notes](https://github.com/rsuter/NJsonSchema/releases)
- [Commits](https://github.com/rsuter/NJsonSchema/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Consider `DBNull.Value` and `NullString.Value` the same as `$null` when comparing with `$null` and casting to bool (PowerShell#9794)

- Adds `LanguagePrimitives.IsNullLike()` method to account for `DBNull.Value` and `NullString.Value` so that they can be considered the same as a null value where sensible in PowerShell.
- Updates `-ne` and `-eq` binders to treat `DBNull.Value` and `NullString.Value` as equal to null/AutomationNull.
- Update code paths for comparing objects in LanguagePrimitives to ensure consistency with how the `-eq` and `-ne` binders work when calling LanguagePrimitives methods to do the comparisons.
- Make `LanguagePrimitives.IsNull()` and `LanguagePrimitives.IsNullLike()` public methods.
- Added tests for null behaviours in `NullRepresentatives.Tests.ps1`

* Start-PSBuild -Clean  doeas not remove all untracked files (PowerShell#10022)

* Avoid `Assembly.GetName()` in 'ClrFacade.GetAssemblies(string)' to reduce allocations of 'CultureInfo' objects (PowerShell#10024)

* Use AddRange in GetModules() (PowerShell#9975)

* Add fast path for wildcard patterns that contains no wildcard characters (PowerShell#10020)

* Set request headers when request body is empty in Web Cmdlets (PowerShell#10034)

* Suppress PossibleIncorrectUsageOfAssignmentOperator rule violation by adding extra parenthesis (PowerShell#9460)

* Use `AddOrUpdate()` instead of `Remove` then `Add` to register runspace (PowerShell#10007)

* Reduce allocations in NavigationCmdletProvider.NormalizePath() (PowerShell#10038)

* Indent fix in markdown-link.tests.ps1 (PowerShell#10049)

* Use a static cache for `PSVersionInfo.PSVersion` to avoid casting `SemanticVersion` to `Version` very time accessing that property (PowerShell#10028)

* Bump Markdig.Signed from 0.17.0 to 0.17.1 (PowerShell#10062)

* Cleanup workflow code (PowerShell#9638)

* Remove WorkFlowInfo type

* Remove condition for UseSharedProcess

* Remove PSWorkflowJob condition

* Remove workflow from ValidateSet

* Remove workflow from CommandTypes enum

* Remove workflow from EventManager

* Remove workflow from Get-Help

* Remove WorkflowFileExtension ".xaml" from ModuleIntrinsics

* Remove WorkflowFileExtension ".xaml" from ModuleCmdletBase

* Remove workflow from PSModuleInfo

* Remove workflow from CustomShellCommands

* Remove workflow from InitialSessionStateProvider

* Remove WriteWorkflowDebugNotSupportedError()

* Remove unneeded resource strings from Module.cs

* Remove xaml from valid extension list

* Add to /etc/shells on macOS (PowerShell#10066)


Co-Authored-By: Robert Holt <rjmholt@gmail.com>

* Check if a reparsepoint is a symlink before trying to get target (PowerShell#9895)

* Make `Foreach-Object` 2 times faster by reducing unnecessary allocations and boxing (PowerShell#10047)

* Update 'Start-PSBuild -Clean' logic of 'git clean' to ignore locked files from VS2019 (PowerShell#10071)

* Create JumpList in STA thread as some COM APIs are strictly STA only to avoid sporadic CLR crashes (PowerShell#10057)

* Upgrade .Net Core 3 SDK from preview5 to preview6 and related out of band Nuget packages from 2.1 to 3.0-preview6 (PowerShell#9888)

* Bump PackageManagement from 1.4.2 to 1.4.3 in /src/Modules (PowerShell#10084)

Bumps PackageManagement from 1.4.2 to 1.4.3.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* add performance tag to change log command

* Bump PowerShellGet from 2.1.5 to 2.2 in /src/Modules (PowerShell#10085)

Bumps [PowerShellGet](https://github.com/PowerShell/PowerShellGet) from 2.1.5 to 2.2.
- [Release notes](https://github.com/PowerShell/PowerShellGet/releases)
- [Changelog](https://github.com/PowerShell/PowerShellGet/blob/development/CHANGELOG.md)
- [Commits](https://github.com/PowerShell/PowerShellGet/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Move some of the creations of `WildcardPattern` in outer loop to avoid unnecessary allocation (PowerShell#10053)

* Add another fast path to `WildcardPattern.IsMatch` for patterns that only have an asterisk in the end (PowerShell#10054)

* Update change log generation tool to deal with private commits (PowerShell#10096)

* Bump System.Text.Encoding.CodePages (PowerShell#10112)

Bumps System.Text.Encoding.CodePages from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Security.AccessControl (PowerShell#10100)

Bumps System.Security.AccessControl from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Threading.AccessControl (PowerShell#10106)

Bumps System.Threading.AccessControl from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Data.SqlClient (PowerShell#10109)

Bumps System.Data.SqlClient from 4.7.0-preview6.19303.8 to 4.7.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Management (PowerShell#10110)

Bumps System.Management from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.DirectoryServices (PowerShell#10105)

Bumps System.DirectoryServices from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Security.Cryptography.Pkcs (PowerShell#10107)

Bumps System.Security.Cryptography.Pkcs from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.IO.Packaging (PowerShell#10108)

Bumps System.IO.Packaging from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Security.Principal.Windows (PowerShell#10101)

Bumps System.Security.Principal.Windows from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Security.AccessControl (PowerShell#10102)

Bumps System.Security.AccessControl from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump System.Configuration.ConfigurationManager (PowerShell#10111)

Bumps System.Configuration.ConfigurationManager from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Add -SecurityDescriptorSddl parameter to Set-Service (PowerShell#8626)

* Bump System.Text.Encodings.Web (PowerShell#10123)

Bumps System.Text.Encodings.Web from 4.6.0-preview6.19303.8 to 4.6.0-preview.19113.10.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Revert "Bump System.IO.Packaging (PowerShell#10108)" (PowerShell#10125)

This reverts commit 45edbd7.

* Revert "Bump System.Data.SqlClient (PowerShell#10109)" (PowerShell#10126)

This reverts commit 83d8ec4.

* Revert "Bump System.Threading.AccessControl (PowerShell#10106)" (PowerShell#10127)

This reverts commit a7f0c6d.

* Revert "Bump System.Text.Encodings.Web (PowerShell#10123)" (PowerShell#10124)

This reverts commit b9501d9.

* Revert "Bump System.Management (PowerShell#10110)" (PowerShell#10129)

This reverts commit e5990ed.

* Revert "Bump System.Security.Cryptography.Pkcs (PowerShell#10107)" (PowerShell#10130)

This reverts commit d33c906.

* Revert "Bump System.Text.Encoding.CodePages (PowerShell#10112)" (PowerShell#10131)

This reverts commit 958cdda.

* Revert "Bump System.Security.AccessControl (PowerShell#10102)" (PowerShell#10132)

This reverts commit 729a29a.

* Revert "Bump System.Configuration.ConfigurationManager (PowerShell#10111)" (PowerShell#10128)

This reverts commit c8fe894.

* Revert "Bump System.Security.Principal.Windows (PowerShell#10101)" (PowerShell#10133)

This reverts commit f75c635.

* Cleanup workflow - remove PSProxyJob (PowerShell#10083)

* Revert "Bump System.DirectoryServices (PowerShell#10105)" (PowerShell#10135)

This reverts commit 2852efc.

# Conflicts:
#	src/System.Management.Automation/System.Management.Automation.csproj

* Fix test password generation rule to meet Windows complexity requirements (PowerShell#10143)

* Cleanup CompiledScriptBlock.cs (PowerShell#9735)

* Add alias for Service 'StartType' (PowerShell#9940)

* Mark Set-Service tests with password as `Pending` (PowerShell#10146)

* Split the fxdependent package on Windows into two packages (PowerShell#10134)

* Remove 'kill' alias for Stop-Process cmdlet on Unix (PowerShell#10098)

* Identify renaming a parameter set as non-breaking in the breaking change contract document (PowerShell#10113)

* Identify renaming a parameter set as non-breaking
Related discussion: PowerShell#10058.

* Add note about S.M.A.Internal

* Update DotNet Support links (PowerShell#10145)

* Remove `markdownlint` tests due to security issues (PowerShell#10163)

* Remove `markdownlint` tests due to security issues (PowerShell#10163)

* Merged PR 5767: Fix RegEx DoS issues

Fix RegEx DoS issues

* Skip `JumpList` on `NanoServer` and `IoT` (PowerShell#10164)

* Skip `JumpList` on `NanoServer` and `IoT` (PowerShell#10164)

* Merged PR 9185: Update PowerShell SDK version for hosting tests

Update PowerShell SDK version for hosting tests

* Merged PR 9168: Disable Enter-PSHostProcess cmdlet when system in lock down mode

This is based on an issue, where Enter-PSHostProcess on a locked down (WDAC enforced) machine allows any admin to connect to any another local hosted PowerShell process and execute commands as that user. This amounts to privilege escalation on the policy locked down machine and something we want to prevent.

Fix is to check for system lock down and disable Enter-PSHostProcess cmdlet with an error message.

* Update README.md and metadata.json for next releases (PowerShell#10087)

* Add tooling section to PR template (PowerShell#10144)

* Add .devcontainer configuration (PowerShell#10114)

* Add the license header to `nanoserver.tests.ps1` (PowerShell#10171)

* Refactor security policy documentation so that they appear in the Security policy tab of GitHub (PowerShell#9905)



Co-Authored-By: Travis Plunk <travis.plunk@microsoft.com>

* PSSA also includes formatting (PowerShell#10172)

* Merged PR 9166: Update changelog for v7.0.0-preview.2

Update changelog for v7.0.0-preview.2

Updates are expected when STA / MTA change comes in.

* Fix hungarian prefix 'my' (PowerShell#9976)

* Update docs for `7.0.0-preview.2` release (PowerShell#10160)

* Update release date for `v7.0.0-preview.2` (PowerShell#10176)

* Reduce allocations in Escape() and Unescape() (PowerShell#10041)

* Add -Raw switch to Select-String for convenience (PowerShell#9901)

* Avoid boxing when passing value type arguments to `PSTraceSource.WriteLine` (PowerShell#10052)

* Fix macOS build break (PowerShell#10207)

* Use nameof() in LocationGlobber and PathInfo (PowerShell#10200)

* Use nameof() in LocationGlobber
* Use nameof() in PathInfo

* Fix: Removed dependency file with Dependabot (PowerShell#10212)

* Enable `-sta` and `-mta` switches for pwsh (PowerShell#10061)

* Use 'Platform.IsWindowsDesktop' instead of checking both NanoServer and IoT (PowerShell#10205)

* Special case the posix locale in WildcardPattern (PowerShell#10186)

* Quote arguments in `.vscode/tasks.json` in case of spaces (PowerShell#10204)

* Create`Distribution_Request` issue template (PowerShell#10253)

* Fix spelling error in issue template (PowerShell#10256)

* Revert the temporary change (PowerShell#10260)

* Bump Microsoft.CodeAnalysis.CSharp from 3.1.0 to 3.2.0 (PowerShell#10273)

Bumps [Microsoft.CodeAnalysis.CSharp](https://github.com/dotnet/roslyn) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/dotnet/roslyn/releases)
- [Changelog](https://github.com/dotnet/roslyn/blob/master/docs/Breaking%20API%20Changes.md)
- [Commits](https://github.com/dotnet/roslyn/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Cleanup: ThreadAbortException is now in .Net Core 3.0 (PowerShell#10230)

* Cleanup: ThreadAbortException is now in .Net Core 3.0

* Fix CodeFactor issue

* Remove ThreadAbortException

* Remove ThreadAbortException relared code

* Remove stable and servicing branches from dependabot (PowerShell#10289)

* Update dead links from powershell.com (PowerShell#10297)

* Remove extra check that the system dll exists (PowerShell#10244)

* Update PowerShell to build against .NET Core 3.0-preview7 (PowerShell#10227)

* Fix debugger disable performance regression (PowerShell#10269)

* Don't collect process starttime as it's not being used on consolehost startup (PowerShell#10294)

* mark _readyForInputTimeInMS member as part of LEGACYTELEMETRY
* move _interactiveCommandCount to LEGACYTELEMETRY

* Cleanup Docker release testing (PowerShell#10310)

* Update our language on our policy applying to security issues (PowerShell#10304)

* Add tests for WildcardPattern.Escape() and Unescape() (PowerShell#10090)

* Update 'Microsoft.PowerShell.CoreCLR.Eventing' to resolve conflict with 'System.Diagnostics.EventLog' (PowerShell#10305)

* Update 'Microsoft.PowerShell.CoreCLR.Eventing' to resolve conflicts
* Add reference to 'System.Diagnostics.EventLog' to build Microsoft.PowerShell.Commands.Diagnostics on Unix
* Stop compiling Get/New-WinEvent on Unix

* Enable Experimental Features by default on Preview builds (PowerShell#10228)

* Bump Microsoft.CodeAnalysis.CSharp from 3.2.0 to 3.2.1 (PowerShell#10330)

Bumps [Microsoft.CodeAnalysis.CSharp](https://github.com/dotnet/roslyn) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/dotnet/roslyn/releases)
- [Changelog](https://github.com/dotnet/roslyn/blob/master/docs/Breaking%20API%20Changes.md)
- [Commits](https://github.com/dotnet/roslyn/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Expose PreRelease label in PSModuleInfo formatter (PowerShell#10316)

* Reduce allocations in MakePath() method (PowerShell#10027)

* Add `Microsoft.PowerShell.CoreCLR.Eventing.dll` to exception list for build fix (PowerShell#10337)

* Add dispose of _runspaceDebugCompleteEvent event object. (PowerShell#10323)

* Make module name matching for `get-module -FullyQualifiedName`… (PowerShell#10329)

* Fix `#requires -version` for pwsh 7 to include 6.1 and 6.2 in `PSCompatibleVersions` (PowerShell#9943)

* Implement ForEach-Object -Parallel feature (PowerShell#10229)

* Add support for AppX reparse points (PowerShell#10331)

* Make Get-DscResource work with class based resources (PowerShell#10350)

* pwsh -Login support (PowerShell#10050)

* Deprecate internal HelpCategory.Workflow enumeration (PowerShell#10319)

* Fix style issues in InternalCommands.cs (PowerShell#10352)

* Deprecate workflow debugging code (PowerShell#10321)

* Bump NJsonSchema from 10.0.21 to 10.0.22 (PowerShell#10364)

Bumps [NJsonSchema](https://github.com/RicoSuter/NJsonSchema) from 10.0.21 to 10.0.22.
- [Release notes](https://github.com/RicoSuter/NJsonSchema/releases)
- [Commits](https://github.com/RicoSuter/NJsonSchema/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Move to .NET Core 3.0 preview.8 (PowerShell#10351)

* Update Microsoft.Management.Infrastructure version to 2.0.0-preview.2 (PowerShell#10366)

* Mark `-parallel` and `-throttlelimit` reserved for `foreach` and `switch` statements (PowerShell#10328)

* Fix minor breakpoint re-hydration bug (PowerShell#10339)

* Additional Telemetry - Implementation of `RFC0036` (PowerShell#10336)

* Formatting: Handle `XTPUSHSGR` and `XTPOPSGR` control sequences (PowerShell#10208)

* .CPL should be added to PATHEXT (PowerShell#9828)

* Add experimental check for `ForEach-Object -Parallel` tests (PowerShell#10354)

* Bump `PackageManagement` from `1.4.3` to `1.4.4` (PowerShell#10383)

Bumps PackageManagement from 1.4.3 to 1.4.4.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Bump PowerShellGet from 2.2 to 2.2.1 in /src/Modules (PowerShell#10382)

Bumps [PowerShellGet](https://github.com/PowerShell/PowerShellGet) from 2.2 to 2.2.1.
- [Release notes](https://github.com/PowerShell/PowerShellGet/releases)
- [Changelog](https://github.com/PowerShell/PowerShellGet/blob/development/CHANGELOG.md)
- [Commits](https://github.com/PowerShell/PowerShellGet/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Merged PR 9744: Update changelog for preview.3 release

Update changelog for preview.3 release

* Update `README.md` and `metadata.json` for `7.0.0-preview.3` (PowerShell#10393)

* Add `PSKoans` to Learning Resources documentation (PowerShell#10369)

* Add some regular contributors to allow access to retry CI (PowerShell#10397)

* Some dependencies for Alpine need `linux-x64` folder (PowerShell#10407)

* Block type update in Add-Type cmdlet (PowerShell#9609)

* Increase built-with-PowerShell module versions to 7.0.0.0 (PowerShell#10356)

* Rename default ParameterSetName back to `Delimiter` for `ConvertTo-Csv` & `ConvertFrom-Csv` (PowerShell#10425)

* rename default parameterset name back to `Delimiter`
* also fix convertfrom-csv
* rename parametersetname for UseCulture back to UseCulture since there is no path for ConvertFrom-Csv

* Skip auto-loading PSReadLine on Windows if the NVDA screen reader is active (PowerShell#10385)

* Bump NJsonSchema from 10.0.22 to 10.0.23 (PowerShell#10421)

Bumps [NJsonSchema](https://github.com/RicoSuter/NJsonSchema) from 10.0.22 to 10.0.23.
- [Release notes](https://github.com/RicoSuter/NJsonSchema/releases)
- [Commits](https://github.com/RicoSuter/NJsonSchema/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

* Add support to `ActionPreference.Break` to break into debugger (PowerShell#8205)

* Alpine validation changes (PowerShell#10428)

* Remove yet another appveyor reference (PowerShell#10445)

* Update the combined package build to release the daily builds (PowerShell#10449)

* Cleanup `AutomationEngine` and remove extra `SetSessionStateDrive` method call (PowerShell#10416)

* Make sure the daily coordinated build, knows it is a daily bui… (PowerShell#10464)

* Minor fix for recursion into OneDrive - Change FindFirstFileEx() to use SafeFindHandle type (PowerShell#10405)

* Update README.md (PowerShell#10465)

Fix typo.

* Make `ForEach-Object` faster for its commonly used scenarios (PowerShell#10454)

* Fix global tool issues around exit code, command line parameters and path with spaces (PowerShell#10461)
@TravisEz13 TravisEz13 added this to the 7.0.0-preview.4 milestone Sep 5, 2019
TravisEz13 pushed a commit to TravisEz13/PowerShell that referenced this pull request Sep 14, 2019
@ghost
Copy link

ghost commented Sep 19, 2019

🎉v7.0.0-preview.4 has been released which incorporates this pull request.:tada:

Handy links:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CL-Engine Indicates that a PR should be marked as an engine change in the Change Log Committee-Reviewed PS-Committee has reviewed this and made a decision

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PS should reset $? to the value it had when it entered the debugger